Laravel 5.7电子邮件验证无法与其他浏览器一起使用

时间:2019-01-07 08:11:34

标签: laravel-5.7 email-verification

最近,我正在使用Laravel 5.7实施电子邮件验证。

如果您遵循以下情况,我发现电子邮件验证不起作用。

场景1

用户在浏览器A上注册了一个帐户,然后在浏览器B上将其激活。

然后它将把用户重定向到登录页面。

显然电子邮件激活失败。

方案2(针对我的用例)

用户在浏览器A上注册了一个帐户。

激活电子邮件已发送到移动收件箱。

用户从手机激活了电子邮件,但激活无效。


我猜想如果使用另一个浏览器代理进行激活是由于找不到激活密钥会话密钥,则激活失败。

有人面临着同样的问题并设法提出解决方案吗?

2 个答案:

答案 0 :(得分:1)

由于Laravel电子邮件验证的工作方式,需要登录用户才能处理验证链接。 您可以通过在VerificationController中更改以下内容来解决此问题

  1. 在__construct()函数中,使验证函数的auth中间件异常
    $this->middleware('auth')->except('verify');
  1. 创建一个验证函数以覆盖laravel验证功能
    public function verify(Request $request)
    {
        $userId = $request->route('id');
        $user = User::findOrFail($userId);

        if ($user->hasVerifiedEmail()) {
            return redirect($this->redirectPath());
        }

        if ($user->markEmailAsVerified()) {
            event(new Verified($user));
        }

        return redirect($this->redirectPath())->with('verified', true);
    }

答案 1 :(得分:0)

回答@Gopal Gautam。完全像这样对我有效:

public function verify(Req $request)
{         
    $userId = $request->route('id');
    $user = \App\User::findOrFail($userId);

    if ($user->hasVerifiedEmail()) {
        \Illuminate\Support\Facades\Auth::login($user);
        return redirect($this->redirectPath())->with('verified', true);
    }

    if ($user->markEmailAsVerified()) {
        event(new Verified($user));
    }

    return redirect($this->redirectPath())->with('verified', true);
}