我们有以下问题: 我们成功注册后发送给所有用户邮件确认邮件。但是当他们试图点击它时,他们需要登录。我们希望用户不需要登录。我们的守则需要做哪种调整?
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'));
}
答案 0 :(得分:2)
我建议您在确认链接中包含电子邮件,即。确认应为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建议确保此方法不会触及任何身份验证中间件,因为用户尚未登录。
答案 1 :(得分:0)
你只需要两件事:
emailConfirmation
操作的控制器中,使用emailConfirmation
进行constructor
除emailConfirmation
之外的身份验证,如下所示:
public function __construct() {
$this->middleware(['auth'])->except('emailConfirmation');
}