在平时的开发应用中,我们可能需要对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');
接着创建控制器
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use \Illuminate\Support\Facades\URL;
class SignatureControl extends Controller
{
//
public function index(){
echo Url::signedRoute('event.rsvp', ['id' => 25, 'user' => 100, 'response' => 'yes']);
echo "<br>";
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 "<br>";
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`
如有问题,可以QQ搜索群1028468525加入群聊,欢迎一起研究技术
转载请注明:laravel签名路由 出自老鄢博客 | 欢迎分享