Laravel,无需登录即可确认邮件
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Laravel,无需登录即可确认邮件相关的知识,希望对你有一定的参考价值。
我们有以下问题:我们成功注册后发送给所有用户邮件确认邮件。但是当他们试图点击它时,他们需要登录。我们希望用户不需要登录。我们的守则需要做哪种调整?
public function emailConfirmation()
{
$token = request('token');
if(Auth::check())
{
$checkToken = User::where('email','=',Auth::user()->email)
->where('confirm_token','=',$token)->first();
if($checkToken)
{
$updatestatus = User::where('email','=',Auth::user()->email)->update(['is_mail_confirmation' => '1']);
$status = true;
$messages = trans('profile.thankyou_message_confirm_mail');
}
else
{
$status = false;
$messages = trans('profile.token_not_match');
}
}
else
{
$status = false;
$messages = trans('profile.without_login_message_confirm_mail');
}
return view('main.confirm',compact('status','messages'));
}
答案
我建议你在确认链接中包含电子邮件,即。确认应该是example.com/confirm?token=PR1234&email=abc@gmail.com
但如果你token
总是独一无二的,那就没有必要了,所以你可以忽略电子邮件检查。
$token = request('token');
$email = request('email');
//if(Auth::check())
//{
$checkToken = User::where('email','=', $email)
->where('confirm_token','=',$token)->first();
if($checkToken)
{
$updatestatus = User::where('email','=', $email)->update(['is_mail_confirmation' => '1']);
$status = true;
$messages = trans('profile.thankyou_message_confirm_mail');
}
else
{
$status = false;
$messages = trans('profile.token_not_match');
}
//}
//else
//{
//$status = false;
//$messages = trans('profile.without_login_message_confirm_mail');
//}
如果您碰巧支持不常见的符号,请注意! #$%* + - 在您的系统中,在将电子邮件添加到确认链接之前,请不要忘记urlencode()。
另外,@ Tarek建议确保此方法不会触及任何auth中间件,因为用户未登录。
另一答案
你只需要两件事:
- 请勿在
emailConfirmation
操作代码中检查身份验证。 - 在包含
emailConfirmation
动作的控制器中创建一个constructor
,除了emailConfirmation
之外,您将通过身份验证,如下所示:
.
public function __construct() {
$this->middleware(['auth'])->except('emailConfirmation');
}
以上是关于Laravel,无需登录即可确认邮件的主要内容,如果未能解决你的问题,请参考以下文章
Laravel 8:我如何在注册后验证用户的电子邮件地址而无需提供登录信息?