Laravel 5.3 E-Mail Подтверждение

Мне нужно реализовать функцию подтверждения адреса электронной почты пользователя, прежде чем он сможет войти на мою платформу.

Я успешно осуществил отправку кода подтверждения при регистрации и сохранил строку «Код подтверждения» и логическое «Подтверждение» о том, подтвержден ли пользователь в базе данных.

Сама проверка также уже выполнена.

Теперь единственная проблема, с которой я столкнулся — это проверка при входе в систему, подтвержден ли пользователь или нет.
Я прочитал API Laravel 5.3, но не мог понять, как редактировать процесс входа в систему так, как мне нравится. Мне не нравится менять слишком много оригинальной функциональности laravel, я просто хочу добавить простой параметр в процесс аутентификации во время входа в систему. Неужели это так сложно?

1

Решение

Хорошо, я нашел решение для моей проблемы.

Теперь я переопределил функцию tryLogin (Request $ request) с моими личными предпочтениями. Не очень много, если вы знаете, что вам нужно искать. Я думаю, что это должно быть как-то разъяснено в документах Laravel, потому что аутентификация сама по себе не работает вообще.

Тем не менее, вот мой код, если кому-то интересно:

protected function attemptLogin(Request $request){
return $this->guard()->attempt([
'email' => $request->email,
'password' => $request->password,
'confirmed' => 1
], $request->has('remember'));
}

Код выше написан в моем файле LoginController.php.

Единственное, что мне теперь нужно выяснить, — это как определить причину сбоя при входе в систему, чтобы я мог сообщить пользователю, была ли неправильна его / ее комбинация электронной почты и пароля, или их учетная запись еще не активирована.

Спасибо за помощь!

1

Другие решения

Ларавел 5.3

Я знаю, что этот вопрос немного устарел, но кто-то еще ищет ответ, который позволил бы вам легко сохранить все функции аутентификации Laravel. Я считаю, что у меня есть один.

Если вы посмотрите на Auth\AuthenticateUser вы заметите, что метод login использует метод attemptLogin, который получает массив учетных данных из метода credentials,

Вместо переопределения всего потока входа в систему, просто переопределите credentials таким образом, вы можете просто установить подтверждение по электронной почте, не теряя сообщения об ошибках и тому подобное.

Для подтверждения подтверждения по электронной почте, в вашем случае, вы можете сделать что-то вроде:

protected function credentials(Request $request)
{
$credentials = $request->only($this->username(), 'password');
$credentials['confirmed'] = 1;
return $credentials;
}
1

Предполагая, что вы используете по умолчанию LoginController
Переопределите метод проверки подлинности в контроллере

public function authenticate()
{
if (Auth::attempt(['email' => $email, 'password' => $password, 'confirmed'=>1])) {
// Authentication passed...
return redirect()->intended('dashboard');
}
}

добавь это в свой контроллер

-1