Laravel签名URL中间件

时间:2019-02-05 16:29:33

标签: laravel url middleware signed

因此,我正在使用laravel进行URL生成,我想知道您是否可以使用具有相同URL签名的多个路由。我将路由分为以下签名的中间件组:

Route::middleware('signed')->group(function () {
Route::get('load/client/{client}/quote/{quote}', 'QuoteController@getClientQuote')->name('clientquote');   
Route::post('submit/client/{client}/quote/{quote}', 'QuoteController@submitClientQuote')->name('clientquote');   
Route::post('save/client/{client}/quote/{quote}', 'QuoteController@saveClientQuote')->name('clientquote');   
Route::get('/client/{client}/quote/{quote}', 'QuoteController@getClientQuoteBlade')->name('clientquote');   

});

我在此处的电子邮件中也生成了URL:

'url'        => URL::signedRoute('clientquote', ['client' => $event->client, 'quote' => $event->quote]),

电子邮件是通过mailgun发送的,当我单击电子邮件中的链接时,它将带我到中间件中的最后一条获取路线。安装该路由的组件后,我将进行第二次axios调用以获取加载路由:

        axios
        .get(
            "/load/client/" + clientNumber + "/quote/" + quoteNumber + window.location.search
        )

删除其他代码,但出现403错误,只是要在控制台中验证以下路线:

/load/client/2/quote/1?signature=5d2e3273e51429ba688f85969911bd3a279d36348f2e74bd10f871a56218e722

是我什至要求的,还是我需要为每个后续路由生成一个新的签名URL?

1 个答案:

答案 0 :(得分:1)

如果在signed中间件下有一条路由,则意味着所有这些路由should都具有有效的签名。否则会给您403错误。

当您致电URL::signedRoute(..)时,该签名特别代表该特定的路由URL。因此,如果您尝试将同一签名完全附加到其他路由,则将无法使用。

您可以做的是,当通过clientquote路由将数据发送到刀片视图时,也发送为/load/client/路由生成的签名URL,然后在axois中使用它。