首页 > 解决方案 > Laravel 签名 URL 中间件

问题描述

所以我正在使用 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?

标签: laravelurlmiddlewaresigned

解决方案


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

当您调用时URL::signedRoute(..),该签名特别代表该特定路由 url。因此,如果您尝试将相同的签名完全附加到不同的路由,它将不起作用。

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


推荐阅读