如何使签名路由在使用后无效意味着如何使只使用一次的链接无效
当前代码如下
URL::signedRoute('email.verify', ['id' => $user->id], now()->addMinutes(30))
您可以根据需要使用以下逻辑。
生成一个过期的临时签名路由URL,您可以使用temporarySignedRoute方法
use IlluminateSupportFacadesURL;
return URL::temporarySignedRoute(
'email/verify', now()->addMinutes(30), ['user' => 1]
);
要验证传入请求是否具有有效签名,您应该对传入请求调用hasValidSignature方法。
use IlluminateHttpRequest;
Route::get('/email/verify/{user}', function (Request $request) {
if (!$request->hasValidSignature()) {
abort(401);
}
// ...
});
如果你看看框架是如何为初始用户验证电子邮件的临时签名路由做到这一点的。你应该看到,这对你的案子来说也很容易。
框架:
/**
* 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(Config::get('auth.verification.expire', 60)),
[
'id' => $notifiable->getKey(),
'hash' => sha1($notifiable->getEmailForVerification()),
]
);
}
您的:
URL::temporarySignedRoute(
'email.verify',
now()->addMinutes(30),
['id' => $user->id],
);