Laravel 5.3电子邮件确认

时间:2016-12-02 12:05:47

标签: php authentication laravel-5.3 confirmation-email

我需要先实现确认用户电子邮件地址的功能,然后才能登录我的平台。

我已成功实施在注册时发送确认码并保存字符串" confirmation_code"和布尔"确认"是否在数据库中确认了用户。

验证本身也已实施。

现在唯一的问题是如果用户被确认,则在登录时进行检查。 我读了Laravel 5.3的API,但我无法弄清楚如何以我喜欢的方式编辑登录过程。我不想改变太多laravel的原始功能,我只想在登录期间为身份验证过程添加一个简单的参数。不能那么难吗?

3 个答案:

答案 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 5.3

我知道这个问题有点老了,但是其他任何人都在寻找答案,让你轻松地保留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');
    }
}

将此添加到您的控制器