我需要先实现确认用户电子邮件地址的功能,然后才能登录我的平台。
我已成功实施在注册时发送确认码并保存字符串" confirmation_code"和布尔"确认"是否在数据库中确认了用户。
验证本身也已实施。
现在唯一的问题是如果用户被确认,则在登录时进行检查。 我读了Laravel 5.3的API,但我无法弄清楚如何以我喜欢的方式编辑登录过程。我不想改变太多laravel的原始功能,我只想在登录期间为身份验证过程添加一个简单的参数。不能那么难吗?
答案 0 :(得分:1)
好的,我找到了解决问题的方法。
我现在用我的个人偏好覆盖了attemptLogin(请求$请求)功能。如果你知道你需要寻找什么,那就没什么了不起的。我认为应该在laravel文档中以某种方式澄清,因为身份验证本身根本不起作用。
但是,如果有人有兴趣,这是我的代码:
protected function attemptLogin(Request $request){
return $this->guard()->attempt([
'email' => $request->email,
'password' => $request->password,
'confirmed' => 1
], $request->has('remember'));
}
上面的代码写在我的LoginController.php文件中。
我现在唯一需要知道的是如何检测登录失败的原因,以便告诉用户他/她的电子邮件/密码组合是错误还是他们的帐户尚未激活。
感谢您的帮助!
答案 1 :(得分:1)
我知道这个问题有点老了,但是其他任何人都在寻找答案,让你轻松地保留Laravel's Auth的所有功能。我相信我有一个。
如果您查看Auth\AuthenticateUser
,您会发现方法login
使用方法attemptLogin
,该方法从方法{{1}获取凭据数组}。
不要覆盖整个登录流程,只需覆盖credentials
方法,这样您就可以简单地设置电子邮件确认,而不会丢失错误消息等。
对于电子邮件确认验证,在您的情况下,您可以执行以下操作:
credentials
答案 2 :(得分:-1)
假设您使用的是默认的LoginController 覆盖控制器中的authenticate方法
public function authenticate()
{
if (Auth::attempt(['email' => $email, 'password' => $password, 'confirmed'=>1])) {
// Authentication passed...
return redirect()->intended('dashboard');
}
}
将此添加到您的控制器