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



当用户注册时,会向他们发送电子邮件验证链接,如下所示:

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

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

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

那么有没有办法改变,以便用户可以重定向到某个页面的特殊登录页面?或者 jusr 修改验证控制器,只允许未经身份验证的用户通过单击链接来"激活"他们的电子邮件。

我正在考虑将用户重定向到存储先前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');
}

然后在我的登录控制器中,我可以简单地将用户重定向到上一页:

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

我以前遇到过这个问题,我的解决方案是您可以在验证控制器_construct()方法中删除$this->middleware('auth');,让未经身份验证的用户从他们的电子邮件中进行验证,然后在验证控制器内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);
}

最新更新