【问题标题】:Laravel Signed URL MiddlwareLaravel 签名 URL 中间件
【发布时间】:2019-06-29 12:52:57
【问题描述】:

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

【问题讨论】:

    标签: laravel url middleware signed


    【解决方案1】:

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

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

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

    【讨论】:

    • 不幸的是我就是这么想的。我希望有一种方法可以制作多个签名 URL。谢谢大佬。
    • 那么就不可能对多条路由使用同一个签名吗?
    • 每个签名都有特定于您签名的路由 url 的元数据哈希。如果你想看看下面发生了什么,检查Illuminate/Routing/UrlGenerator.php 文件和signedRoute 函数。您会注意到哈希函数具有特定的路线详细信息,其他路线会有所不同
    猜你喜欢
    • 1970-01-01
    • 2021-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多