如何在laravel 5.2登录时检查电子邮件(确认/否)?

Posted

技术标签:

【中文标题】如何在laravel 5.2登录时检查电子邮件(确认/否)?【英文标题】:How to check email (confirmed/or no) at login in laravel 5.2? 【发布时间】:2017-03-23 22:27:34 【问题描述】:

我使用标准的 Laravel 身份验证。

php artisan make:auth

但我需要检查用户电子邮件的状态(已确认/未确认)。如果未确认,则会在登录页面显示错误。

Laravel 5.2

谢谢!

【问题讨论】:

数据库中的字段 - 确认 (1/0)。我了解有必要查看中间件,但我不明白如何进行此检查。 看看this。它适用于L5.2,但它也适用于L5.3 尊敬的 OP,既然您将答案标记为可接受,请您详细说明您为什么这样做。如果您能够调整答案中的代码,请分享您完成的解决方案,以便其他访问者会觉得这很有帮助。谢谢。 【参考方案1】:

users 表中创建一列is_verified 和另一列verification_hash。在AuthController.php

    protected function create(array $data)
    
    return User::create([
        'name' => $data['name'],
        'username' => $data['username'],
        'email' => $data['email'],
        'password' => bcrypt($data['password']),
        'verification_hash' => md5($data['name'] . Carbon::now()->timestamp),
        'is_verified' => 0,
    ]);
   

覆盖register方法向他发送带有验证链接的邮件

public function register(Request $request)

    $validator = $this->validator($request->all());

    if ($validator->fails()) 
        $this->throwValidationException(
            $request, $validator
        );
    

    $user = $this->create($request->all());
    Auth::guard($this->getGuard())->login($user);

    // Send verification email
    // use $user->verification_hash to generate link
    return redirect($this->redirectPath());

现在这个验证链接应该如下所示,因为它包含特定于该用户的哈希

http://your_domain.com/auth/verify/6d533b7664483d3cadd13c23477e4f12

在此链接方法上,将该用户的 is_verified 更改为 1。

现在像这样修改你的validator 方法

protected function validator(array $data)

    return Validator::make($data, [
        'name' => 'required|max:255',
        'username' => 'required|max:255|unique:users',
        'email' => 'required|email|max:255|unique:users',
        'password' => 'required|min:6|confirmed',
        'is_verified'=>'in:1'
    ]);

这将只允许那些is_verified值为1的用户登录。

希望这会有所帮助。

【讨论】:

这是一个公认的答案吗?该代码没有意义...如果未验证,这不会拒绝您登录,验证器中'is_verified'=>'in:1 的意义何在?邮件发送、is_verified更新、is_verified检查、自定义错误异常抛出,都没有实现…… 我猜这段代码是从一些 3rd-party Laravel 验证插件中截取的。 哥们,冷静点。这段代码是我针对这个特定问题自行开发的。如果您有任何问题,您可以随时根据需要修改代码。 如果“根据需要修改代码”的意思是“编写可以实际工作的代码”,那肯定是。否则,这些只是与 OP 的问题“有关”的随机代码行。另外,您没有回答我的任何问题 - 这是因为您不知道,还是...? 如果它不适合你,那意味着你在某个地方搞砸了......因为laravel.com/docs/5.2/validation#available-validation-rules 告诉in 在验证中是如何工作的。请再次检查您的代码并告诉我。

以上是关于如何在laravel 5.2登录时检查电子邮件(确认/否)?的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 5.2 或 5.3:如何正确实施检查会话是不是已登录

检查具有特定id的用户是否已登录laravel 5.2

在AuthController中覆盖laravel的5.2身份验证方法

Laravel 5.2 在同一页面上登录和注册表单

想修改 laravel 默认登录来检查用户是不是被验证

Laravel:登录后的空白页面,然后检查角色