laravel签名路由

发布时间:2021-01-15 22:12:52 阅读:1358次

在平时的开发应用中,我们可能需要对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加入群聊,欢迎一起研究技术

支付宝 微信

有疑问联系站长,请联系QQ:QQ咨询

转载请注明:laravel签名路由 出自老鄢博客 | 欢迎分享