【问题标题】:Email Verification in Laravel 5.1.*Laravel 5.1.* 中的电子邮件验证
【发布时间】:2015-11-28 03:42:06
【问题描述】:

我想在我的 laravel 应用上添加电子邮件验证。提交注册表后,用户将收到一封带有确认链接的电子邮件。如何使用 laravel 的默认身份验证控制器来实现这一点?我在我的用户表上添加了两个字段(已确认,确认码)。请有人帮助我...

【问题讨论】:

  • 您是否对此进行过任何研究或尝试过什么?如果我们只给您代码,您将不会学到任何东西 - 您最好尝试一些东西,我们会帮助您调试它以使其正常工作。
  • 从昨天开始尝试,兄弟。这是我的最后一步(在 stackoverflow 中寻求帮助)。我得到的所有解决方案都与 L5 相关,他们使用 RegisterUser 控制器,但在 laravel 5.1 中它是 AuthController。我决定创建一个发送邮件的路线(带有确认码)。提交表单后,用户将被重定向到该路线。但是现在我在发送邮件时遇到问题。 Swift_TransportException 带有消息“无法使用 3 个可能的身份验证器在用户名“xyz@gmail.com”的 SMTP 服务器上进行身份验证”
  • 如果您愿意,您可以放置​​代码以生成确认代码并在AuthController 中发送电子邮件。但是,听起来您有解决方法。关于您收到的错误,您是否已启用您的 gmail 帐户以使用不太安全的应用程序 - myaccount.google.com/security#connectedapps ?或者您是否为 gmail 启用了双因素身份验证?
  • 我在 gmail 中尝试了很多方法(启用了不太安全的应用程序,解锁了验证码),但没有奏效。就在几秒钟前,它与mailgun(幸福的emo)一起工作。感谢您对詹姆斯的大力支持。我会让你知道我在验证方面走了多远。
  • OK 完美。例如,我将发布一个答案,向您展示我是如何在AuthController 中实现电子邮件验证的。

标签: laravel-5.1


【解决方案1】:

根据我们的评论线程,您可以将其集成到AuthController 中。可能有更好的方法可以做到这一点,但它对我来说很有魅力。

public function postRegister(Request $request)
    {
       //Run validator checks....


        $confirmation_code = str_random(30);
        $newUser = new User;
        $newUser->username = $request->username;
        $newUser->email = $request->email;
        $newUser->password = bcrypt($request->password);
        $newUser->confirmation_code = $confirmation_code;

        $newUser->save();

        $data = array('confirmation_code' => $confirmation_code);

        Mail::send('emails.verify', $data, function ($message) use ($newUser){
            $message->to($newUser->email, $newUser->username);
                $message->subject('Please verify your email address');
        });

        //Continue on with any other logic
    }

【讨论】:

  • 詹姆斯的另一件事...我在基础/Auth/AthenticatesUsers.php 文件的 getCredentials() 函数上添加了一个字段(已确认)。但是如果确认 == 1 来验证用户身份,我找不到我应该比较的地方。
  • @musafir 是在他们点击链接以激活他们的帐户时,还是在他们登录以检查他们的帐户是否被确认时?
  • 请告诉我如何在评论中添加代码:p
【解决方案2】:

当他们处于登录状态时。幸运的是,我设法解决了这个问题。我像这样更改了我的 Authenticate 中间件:

public function handle($request, Closure $next)
    {
        if ($this->auth->guest()) {
            if ($request->ajax()) {
                return response('Unauthorized.', 401);
            } else {
                return redirect()->guest('auth/login');
            }
        } elseif (!\Auth::user()->is_activated()) {
        \Session::flash('message', 'Please activate your account to proceed.');
        return redirect()->guest('/notice/activate');
        }

        return $next($request);
    }

【讨论】:

    猜你喜欢
    • 2020-03-18
    • 2019-02-12
    • 2021-02-15
    • 2017-06-23
    • 1970-01-01
    • 1970-01-01
    • 2017-08-21
    • 2019-12-16
    • 2018-10-10
    相关资源
    最近更新 更多