Laravel电子邮件验证在登录后将用户重定向回验证URL

时间:2019-11-25 14:26:36

标签: laravel email authentication

用户注册后,将向他们发送一封电子邮件验证链接,该链接类似于:

https://mysite.test/email/verify/3?expires=1574693909&hash=09ec600dfgdfgdfgc0b7c36bc775487fdgdg45312f46fc06107&signature=5581f53e9asdfasdf6f97657bc0f939a9bc368b6cd2dfgdgerg62c1711de44d

奇怪的行为是,用户在单击电子邮件验证链接时必须我登录,如果用户在单击链接时未登录,则他们将被重定向到登录页面,如果他们随后登录他们将被重定向到说他们必须验证auth:verified中间件的电子邮件原因的页面。

我想要的是当未登录的用户单击电子邮件验证链接并重定向到登录页面并登录时,然后应再次重定向到电子邮件验证网址

那么有什么方法可以更改,以便可以将用户重定向到特定页面的特殊登录页面?或jusr修改VerificationController,使其只允许未经身份验证的用户通过单击链接“激活”他们的电子邮件。

我正在考虑将用户重定向到存储先前URL会话的登录页面:

public function showRedirectLoginForm()
    {
        $previous_url = Session::get('_previous.url');
        $ref = isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : '';
        $ref = rtrim($ref, '/');
        if ($previous_url != url('login')) {
            Session::put('referrer', $ref);
            if ($previous_url == $ref) {
                Session::put('url.intended', $ref);
            }
        }

        return view('auth.login');
    }

然后在我的logincontroller中,我可以简单地将用户重定向到上一页:

if (Auth::attempt($credentials, $remember)) {
            if (Session::has('referrer')) {
                return redirect()->intended(Session::pull('referrer'));
            } else {
                return redirect('/account');
            }
        }

1 个答案:

答案 0 :(得分:1)

我之前遇到过这个问题,我的解决方法是您可以在VerificationController的$this->middleware('auth');方法中删除_construct(),以允许未经身份验证的用户从其电子邮件中进行验证,然后在VerificationController内部的verify()方法中您可以像这样修改代码:

public function verify(Request $request)
{
    $user = User::find($request->route('id'));

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

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

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