我自定义了我的LoginController,以防止用户在未验证帐户的情况下登录,因为这不是Laravel的默认行为。
现在,用户正在登录并且帐户未通过验证,我问他是否想要一个新的邮件通知来验证他的帐户。由于我没有$request->user()
,因此我不知道如何覆盖此方法:
VerificationController.php
public function resend(Request $request)
{
if ($request->user()->hasVerifiedEmail()) {
return redirect($this->redirectPath());
}
$request->user()->sendEmailVerificationNotification();
return back()->with('resent', true);
}
我曾考虑过要获取用户的邮件,但是如何根据他的邮件而不是Laravel期望的user()
向他发送电子邮件?
答案 0 :(得分:1)
您有两种选择,最简单的选择是使用Signed URLs来允许resend
接受用户id
参数,然后当用户登录并未经验证,您将他们与他们的resend
重定向到id
页,以在没有活动用户会话的情况下识别他们的帐户。
例如,您的登录控制器将如下所示:
if (! $user->hasVerifiedEmail()()) {
return redirect()->to(URL::signedRoute('resend', ['id' => $user->id]));
}
您的VerificationController@resend
方法看起来像这样:
public function resend(Request $request)
{
if ($request->input('id') && $request->hasValidSignature()) {
$user = User::findOrFail($request->input('id'));
}
$user = $user ?: $request->user();
if ($user->hasVerifiedEmail()) {
return redirect($this->redirectPath());
}
$user->sendEmailVerificationNotification();
return back()->with('resent', true);
}
也就是说,Laravel包含了需要电子邮件验证的中间件:它确实允许登录,但在用户验证之前它不允许用户做任何事情,除非您有理由完全阻止登录,否则中间件就可以满足您的需求。您可以在中间件here上找到信息。