laravel - 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?
解决方案
如果您在中间件下有路由signed
,则意味着所有这些路由should
都有有效的签名。否则会给你403错误。
当您调用时URL::signedRoute(..)
,该签名特别代表该特定路由 url。因此,如果您尝试将相同的签名完全附加到不同的路由,它将不起作用。
您可以做的是,当您将数据发送到clientquote
路由中的刀片视图时,发送生成的签名 url 以及/load/client/
路由,然后在 axois 中使用它。
推荐阅读
- database - 如何在 Laravel 数据库中获取所有国家与城市和州
- angular - 如何在 Angular 6 中编辑环境变量而不重建?
- sql - 引用表中没有与外键中的列列表匹配的主键或候选键
- javascript - document.execCommand("copy") 不适用于所有浏览器
- eclipselink - EclipseLink Moxy 与 Java11
- react-native - 如何在 React-native 中调用 Field 渲染方法之外的函数?
- monitoring - Grafana/Graphite 将 y 轴标签更改为折线图的 %
- vb.net - 为什么我没有将对象引用设置为 Google Drive Api 中的对象实例?
- vb.net - 为什么其他列也不接受 datagridview 单元格格式的字母?
- javascript - 不能将 @Res() 与 FilesInterceptor() 一起使用