更改laravel 5.7中验证电子邮件中方法VerificationUrl()的邮件中验证链接中自定义参数的“ VerifyEmail”类

时间:2018-09-23 20:57:39

标签: laravel email-verification laravel-5.7

laravel 5.7随附的

验证电子邮件。我需要在哪里更改它?我在网上搜索了所有内容,但是由于它是5.7中的全新功能,所以我找不到答案。你能帮我吗?预先感谢。

该类基本上位于Illuminate \ Auth \ Notifications

我要覆盖其中一种方法:

 class VerifyEmail extends Notification
        {
          // i wish i could override this method
           protected function verificationUrl($notifiable)
            {
             return URL::temporarySignedRoute('verification.verify', Carbon::now()->addMinutes(60), ['id' => $notifiable->getKey()]);
            } 
        }

1 个答案:

答案 0 :(得分:4)

由于您的User模型使用Illuminate\Auth\MustVerifyEmail,因此您可以覆盖方法sendEmailVerificationNotification,该方法是通过调用方法notify通知创建的用户并以参数,即Notifications\MustVerifyEmail类的新实例。

您可以创建自定义通知,该通知将作为参数传递给$this->notify()模型中的sendEmailVerificationNotification方法内的User

public function sendEmailVerificationNotification()
{
    $this->notify(new App\Notifications\CustomVerifyEmail);
}

CustomVerifyEmail通知中,您可以定义route,通过该Illuminate\Auth\Events\Registered处理验证以及验证所采用的所有参数。

新用户注册App\Http\Controllers\Auth\RegisterController时,会在Illuminate\Auth\Listeners\SendEmailVerificationNotification中发出一个事件,并且该事件具有一个监听器App\Providers\EventServiceProvider,该监听器已注册在protected $listen = [ Registered::class => [ SendEmailVerificationNotification::class, ] ]; 中:

$user

此侦听器检查在Laravel默认身份验证new Registered($user = $this->create($request->all()))中作为参数传递给App\Http\Controllers\Auth\RegisterController的{​​{1}}是否是特征的Illuminate\Contracts\Auth\MustVerifyEmail的实例想要提供默认电子邮件验证并检查App\User尚未被验证时,Laravel建议在$user模型中使用的模型。如果所有这些都通过,它将在该用户上调用sendEmailVerificationNotification方法:

if ($event->user instanceof MustVerifyEmail && !$event->user->hasVerifiedEmail()) {
        $event->user->sendEmailVerificationNotification();
}