问答 / 5 / 4 / 创建于 5年前
比如用户邮箱注册后,发一个验证url,然后用户点击一次后就失效这种效果,有没有这种功能的?
这个很简单,在生成验证token后,把token传入cache(如redis或memcache)中,在点击验证URL后,跳转验证路由,如果cache中有这个key,验证通过,然后从cache中forget掉这个key就行了
Laravel 自带了 verified 的中间件。 如果没验证邮箱的用户访问一个配置好的路由,就会提示该用户邮箱未激活。
https://github.com/spatie/laravel-url-sign...
Laravel 允许你轻松地为命名路径创建「签名」URL,这些 URL 在查询字符串后附加了「签名」哈希,允许 Laravel 验证 URL 自创建以来未被修改过。签名 URL 对于可公开访问但需要一层防止 URL 操作的路由特别有用。
例如,你可以使用签名 URL 来实现通过电子邮件发送给客户的公共「取消订阅」链接。要创建指向路径的签名 URL ,请使用 facade 的 signedRoute 方法 URL :
signedRoute
URL
use Illuminate\Support\Facades\URL; return URL::signedRoute('unsubscribe', ['user' => 1]);
如果要生成过期的临时签名路由 URL ,可以使用以下 temporarySignedRoute 方法:
temporarySignedRoute
use Illuminate\Support\Facades\URL; return URL::temporarySignedRoute( 'unsubscribe', now()->addMinutes(30), ['user' => 1] );
要验证传入请求是否具有有效签名,你应该调用 hasValidSignature 传入的方法 Request:
hasValidSignature
Request
use Illuminate\Http\Request; Route::get('/unsubscribe/{user}', function (Request $request) { if (! $request->hasValidSignature()) { abort(401); } // ... })->name('unsubscribe');
或者,你可以将 Illuminate\Routing\Middleware\ValidateSignature 中间件分配给路由。如果它不存在,则应该在 HTTP 内核的 routeMiddleware 数组中为此中间件分配一个键:
Illuminate\Routing\Middleware\ValidateSignature
routeMiddleware
/** * 应用程序的路由中间件 * * 这些中间件可能被分配给组或单独使用 * * @var array */ protected $routeMiddleware = [ 'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class, ];
在内核中注册中间件后,你可以将其附加到路由中。如果传入请求没有有效签名,则中间件将自动返回 403 错误响应:
403
Route::post('/unsubscribe/{user}', function (Request $request) { // ... })->name('unsubscribe')->middleware('signed');
然后结合 Redis set 的 key 增加一次性查看就好了
我要举报该,理由是:
这个很简单,在生成验证token后,把token传入cache(如redis或memcache)中,在点击验证URL后,跳转验证路由,如果cache中有这个key,验证通过,然后从cache中forget掉这个key就行了
Laravel 自带了 verified 的中间件。
如果没验证邮箱的用户访问一个配置好的路由,就会提示该用户邮箱未激活。
https://github.com/spatie/laravel-url-sign...
签名 URL
Laravel 允许你轻松地为命名路径创建「签名」URL,这些 URL 在查询字符串后附加了「签名」哈希,允许 Laravel 验证 URL 自创建以来未被修改过。签名 URL 对于可公开访问但需要一层防止 URL 操作的路由特别有用。
例如,你可以使用签名 URL 来实现通过电子邮件发送给客户的公共「取消订阅」链接。要创建指向路径的签名 URL ,请使用 facade 的
signedRoute
方法URL
:如果要生成过期的临时签名路由 URL ,可以使用以下
temporarySignedRoute
方法:验证签名路由请求
要验证传入请求是否具有有效签名,你应该调用
hasValidSignature
传入的方法Request
:或者,你可以将
Illuminate\Routing\Middleware\ValidateSignature
中间件分配给路由。如果它不存在,则应该在 HTTP 内核的routeMiddleware
数组中为此中间件分配一个键:在内核中注册中间件后,你可以将其附加到路由中。如果传入请求没有有效签名,则中间件将自动返回
403
错误响应:然后结合 Redis set 的 key 增加一次性查看就好了