Laravel 5.7邮箱验证过期时间
Laravel 5.7 email verification expiration time
我想自定义用户必须通过内置 Auth(自 5.7 起)验证其电子邮件地址的时间。
在config/auth
中有:
'passwords' => [
'users' => [
'provider' => 'users',
'table' => 'password_resets',
'expire' => 60,
],
],
但我还没有发现任何类似的电子邮件验证。 the official documentation.
中也没有提及
如果打开 Illuminate\Auth\Notifications\VerifyEmail::class;
生成 URL 的方法已经使用默认为 1 小时的过期时间。不幸的是,没有修改该值的选项。
/**
* Get the verification URL for the given notifiable.
*
* @param mixed $notifiable
* @return string
*/
protected function verificationUrl($notifiable)
{
return URL::temporarySignedRoute(
'verification.verify', Carbon::now()->addMinutes(60), ['id' => $notifiable->getKey()]
);
}
事实上 Laravel 中没有这些选项,但由于 laravel 使用了以下选项:
一个特征MustVerifyEmail
(在Illuminate\Foundation\Auth\User
class中由主要User
模型扩展)
事件和通知
在 MustVerifyEmail
trait 中,有一个名为 sendEmailVerificationNotification
的方法。这是 引用的通知 VerifyEmail
class 及其函数 verificationUrl
使用的地方:
/**
* Send the email verification notification.
*
* @return void
*/
public function sendEmailVerificationNotification()
{
$this->notify(new Notifications\VerifyEmail);
}
既然我们知道了这一点,我们就可以做到以下几点:
- 将
Notifications\VerifyEmail
扩展为我们的自定义 VerifyEmail
class
- 覆盖
verificationUrl
的实施
- 覆盖
User
模型中 sendEmailVerificationNotification
方法的实现以使用我们新的 VerifyEmail
class.
完成上述操作后,我们的 User
模型将具有以下方法:
/**
* Send the email verification notification.
*
* @return void
*/
public function sendEmailVerificationNotification()
{
$this->notify(new \App\Services\Verification\VerifyEmail);
}
现在我们使用我们的习惯 VerifyEmail
class。那么我们的新 VerifyEmail
class 将如下所示:
namespace App\Services\Verification;
use Illuminate\Support\Carbon;
use \Illuminate\Support\Facades\URL;
class VerifyEmail extends \Illuminate\Auth\Notifications\VerifyEmail
{
protected function verificationUrl($notifiable)
{
return URL::temporarySignedRoute(
'verification.verify', Carbon::now()->addMinute(3), ['id' => $notifiable->getKey()]
); //we use 3 minutes expiry
}
}
好吧,除了解释之外,这个过程非常简单。我希望它很容易掌握。干杯!
虽然这个问题专门针对 Laravel 5.7,但我觉得值得一提的是,从 Laravel 5.8 开始,可以使用配置变量来实现这一点。我对自定义验证到期时间的搜索返回了这个问题作为最高结果,因此我添加了。
如果我们查看 Illuminate\Auth\Notifications\VerifyEmail
,verificationUrl
方法现在看起来像这样:
protected function verificationUrl($notifiable)
{
return URL::temporarySignedRoute(
'verification.verify',
Carbon::now()->addMinutes(Config::get('auth.verification.expire', 60)),
['id' => $notifiable->getKey()]
);
}
因此,我们只需将此块添加到 config/auth.php
即可自定义时间,而无需扩展 类 或任何内容:
'verification' => [
'expire' => 525600, // One year - enter as many mintues as you would like here
],
UPDATE:我已经写过关于上述方法的文章,还有一篇关于通过覆盖 verificationUrl
方法来自定义流程的文章,为您提供更大的灵活性,on my blog.
我想自定义用户必须通过内置 Auth(自 5.7 起)验证其电子邮件地址的时间。
在config/auth
中有:
'passwords' => [
'users' => [
'provider' => 'users',
'table' => 'password_resets',
'expire' => 60,
],
],
但我还没有发现任何类似的电子邮件验证。 the official documentation.
中也没有提及如果打开 Illuminate\Auth\Notifications\VerifyEmail::class;
生成 URL 的方法已经使用默认为 1 小时的过期时间。不幸的是,没有修改该值的选项。
/**
* Get the verification URL for the given notifiable.
*
* @param mixed $notifiable
* @return string
*/
protected function verificationUrl($notifiable)
{
return URL::temporarySignedRoute(
'verification.verify', Carbon::now()->addMinutes(60), ['id' => $notifiable->getKey()]
);
}
事实上 Laravel 中没有这些选项,但由于 laravel 使用了以下选项:
一个特征
MustVerifyEmail
(在Illuminate\Foundation\Auth\User
class中由主要User
模型扩展)事件和通知
在 MustVerifyEmail
trait 中,有一个名为 sendEmailVerificationNotification
的方法。这是 VerifyEmail
class 及其函数 verificationUrl
使用的地方:
/**
* Send the email verification notification.
*
* @return void
*/
public function sendEmailVerificationNotification()
{
$this->notify(new Notifications\VerifyEmail);
}
既然我们知道了这一点,我们就可以做到以下几点:
- 将
Notifications\VerifyEmail
扩展为我们的自定义VerifyEmail
class - 覆盖
verificationUrl
的实施
- 覆盖
User
模型中sendEmailVerificationNotification
方法的实现以使用我们新的VerifyEmail
class.
完成上述操作后,我们的 User
模型将具有以下方法:
/**
* Send the email verification notification.
*
* @return void
*/
public function sendEmailVerificationNotification()
{
$this->notify(new \App\Services\Verification\VerifyEmail);
}
现在我们使用我们的习惯 VerifyEmail
class。那么我们的新 VerifyEmail
class 将如下所示:
namespace App\Services\Verification;
use Illuminate\Support\Carbon;
use \Illuminate\Support\Facades\URL;
class VerifyEmail extends \Illuminate\Auth\Notifications\VerifyEmail
{
protected function verificationUrl($notifiable)
{
return URL::temporarySignedRoute(
'verification.verify', Carbon::now()->addMinute(3), ['id' => $notifiable->getKey()]
); //we use 3 minutes expiry
}
}
好吧,除了解释之外,这个过程非常简单。我希望它很容易掌握。干杯!
虽然这个问题专门针对 Laravel 5.7,但我觉得值得一提的是,从 Laravel 5.8 开始,可以使用配置变量来实现这一点。我对自定义验证到期时间的搜索返回了这个问题作为最高结果,因此我添加了。
如果我们查看 Illuminate\Auth\Notifications\VerifyEmail
,verificationUrl
方法现在看起来像这样:
protected function verificationUrl($notifiable)
{
return URL::temporarySignedRoute(
'verification.verify',
Carbon::now()->addMinutes(Config::get('auth.verification.expire', 60)),
['id' => $notifiable->getKey()]
);
}
因此,我们只需将此块添加到 config/auth.php
即可自定义时间,而无需扩展 类 或任何内容:
'verification' => [
'expire' => 525600, // One year - enter as many mintues as you would like here
],
UPDATE:我已经写过关于上述方法的文章,还有一篇关于通过覆盖 verificationUrl
方法来自定义流程的文章,为您提供更大的灵活性,on my blog.