在让他能够登录我的平台之前,我需要实现确认用户电子邮件地址的功能。
我已经成功实现了在注册时发送确认码,并保存了一个字符串“confirmation_code”和一个布尔值“确认”用户是否在数据库中得到确认。
验证本身也已经实施。
现在我唯一的问题是在登录时检查用户是否被确认。我阅读了 Laravel 5.3 的 API,但我不知道如何以我喜欢的方式编辑登录过程。我不喜欢对 laravel 原有的功能做太多改动,我只是想在登录时的认证过程中添加一个简单的参数。能不能这么难?
在让他能够登录我的平台之前,我需要实现确认用户电子邮件地址的功能。
我已经成功实现了在注册时发送确认码,并保存了一个字符串“confirmation_code”和一个布尔值“确认”用户是否在数据库中得到确认。
验证本身也已经实施。
现在我唯一的问题是在登录时检查用户是否被确认。我阅读了 Laravel 5.3 的 API,但我不知道如何以我喜欢的方式编辑登录过程。我不喜欢对 laravel 原有的功能做太多改动,我只是想在登录时的认证过程中添加一个简单的参数。能不能这么难?
我知道这个问题有点老了,但任何人都在寻找一个答案,让你轻松保留 Laravel Auth 的所有功能。我相信我有一个。
如果您看一下,Auth\AuthenticateUser
您会注意到该方法login
使用该方法attemptLogin
,该方法从该方法中获取凭据数组credentials
。
而不是覆盖整个登录流程,只需覆盖该credentials
方法,这样您就可以简单地设置电子邮件确认而不会丢失错误消息等。
对于电子邮件确认验证,在您的情况下,您可以执行以下操作:
protected function credentials(Request $request)
{
$credentials = $request->only($this->username(), 'password');
$credentials['confirmed'] = 1;
return $credentials;
}
好的,我找到了解决我的问题的方法。
我现在已经用我的个人喜好覆盖了 attemptLogin(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 文件中。
我现在唯一需要知道的是如何检测登录失败的原因,以便我可以告诉用户他/她的电子邮件/密码组合是否错误或他们的帐户尚未激活。
谢谢您的帮助!
假设您使用默认 LoginController 覆盖控制器中的身份验证方法
public function authenticate()
{
if (Auth::attempt(['email' => $email, 'password' => $password, 'confirmed'=>1])) {
// Authentication passed...
return redirect()->intended('dashboard');
}
}
将此添加到您的控制器