在平时的开发应用中,我们可能需要对url进行认证
比如不能随意篡改url中的参数,url只有在指定的时间范围内有效
当然我们可以自己来写代码实现
在laravel中有更加优雅的实现方法,就是我们现在要讲的签名路由
首先将`'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class,`加入到`app/Http/Kernel.php`中
```
protected $routeMiddleware = [
......
'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class,
......
];
```
然后添加路由
```
Route::get('signature', 'SignatureControl@index');
Route::get('event/{id}/rsvp/{user}/{response}', 'SignatureControl@event')->name('event.rsvp');
```
接着创建控制器
```
25, 'user' => 100, 'response' => 'yes']);
echo "
";
echo URL::temporarySignedRoute('event.rsvp', now()->addMinutes(1), [
'id' => 25,
'user' => 100,
'response' => 'yes'
]);
}
public function event(Request $request,$id){
if (! $request->hasValidSignature()) {
abort(401);
}
echo "id->".$id;
echo "
";
echo "user->".$request->route('user');
}
}
```
我们访问`http://api.test.com/signature`可以生成url
接着访问`http://api.test.com/event/25/rsvp/100/yes?expires=1610692076&signature=46e200d801ce7fd62f10daeee0aa7610d68c3ca1ad89e1b19e13f53e0f436f88`
如果在指定时间范围内访问可以访问,如果自己改了url中的参数,则会提示`401
UNAUTHORIZED`