Мне нужно реализовать функцию подтверждения адреса электронной почты пользователя, прежде чем он сможет войти на мою платформу.
Я успешно осуществил отправку кода подтверждения при регистрации и сохранил строку «Код подтверждения» и логическое «Подтверждение» о том, подтвержден ли пользователь в базе данных.
Сама проверка также уже выполнена.
Теперь единственная проблема, с которой я столкнулся — это проверка при входе в систему, подтвержден ли пользователь или нет.
Я прочитал API Laravel 5.3, но не мог понять, как редактировать процесс входа в систему так, как мне нравится. Мне не нравится менять слишком много оригинальной функциональности laravel, я просто хочу добавить простой параметр в процесс аутентификации во время входа в систему. Неужели это так сложно?
Хорошо, я нашел решение для моей проблемы.
Теперь я переопределил функцию 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.
Единственное, что мне теперь нужно выяснить, — это как определить причину сбоя при входе в систему, чтобы я мог сообщить пользователю, была ли неправильна его / ее комбинация электронной почты и пароля, или их учетная запись еще не активирована.
Спасибо за помощь!
Я знаю, что этот вопрос немного устарел, но кто-то еще ищет ответ, который позволил бы вам легко сохранить все функции аутентификации Laravel. Я считаю, что у меня есть один.
Если вы посмотрите на Auth\AuthenticateUser
вы заметите, что метод login
использует метод attemptLogin
, который получает массив учетных данных из метода credentials
,
Вместо переопределения всего потока входа в систему, просто переопределите credentials
таким образом, вы можете просто установить подтверждение по электронной почте, не теряя сообщения об ошибках и тому подобное.
Для подтверждения подтверждения по электронной почте, в вашем случае, вы можете сделать что-то вроде:
protected function credentials(Request $request)
{
$credentials = $request->only($this->username(), 'password');
$credentials['confirmed'] = 1;
return $credentials;
}
Предполагая, что вы используете по умолчанию LoginController
Переопределите метод проверки подлинности в контроллере
public function authenticate()
{
if (Auth::attempt(['email' => $email, 'password' => $password, 'confirmed'=>1])) {
// Authentication passed...
return redirect()->intended('dashboard');
}
}
добавь это в свой контроллер