【发布时间】:2019-05-22 08:57:03
【问题描述】:
我正在尝试利用 Laravel 5.7 中新的签名中间件,但由于某种原因,生成的签名 URL 返回 403 Invalid Signature。
我正在使用最新的 Laravel 版本,PHP 7.2
这是我的 web.php 路由:
Route::get('/report/{user}/{client}', function ($user, $client) {
return ("El usuario es: $user y el cliente es: $client");
})->name('report.client')->middleware('signed');
这是在我的控制器中:
$objDemo->tempURL = Url::temporarySignedRoute('report.client', now('America/Panama')->addDays(5), [
'user' => 1,
'client' => 1
]);
生成 URL 并显示如下内容:
但是当我点击链接时,结果是 403 并显示消息:“无效签名”
有什么想法吗?提前谢谢
-----------更新------------
我已经做过的事情:
- 不签路试一试,完美运行
- 尝试不带参数只签名的路由
- 尝试不临时设置只签名的路由
- 将 cloudflare 的 ip 设置为受信任的代理
- 禁用 HTTPS,启用 HTTPS
似乎没有任何效果,总是得到 403 无效签名页
-----------更新 2------------
好的,所以经过一些挖掘和测试,我发现如果用户登录,laravel 签名的路由将不起作用,这很奇怪,如果我注销,那么路由可以正常工作,但是如果我登录-in 然后它显示 403 错误,这可能是因为 Laravel 在其他所有内容之后添加了会话 cookie 标头吗?所以签名的路线因此而失败?应该是这样吗?
很奇怪,因为假设我想为我的用户创建一个临时链接以下载某些东西,如果他们登录到我的 Laravel 应用程序,他们将收到此 403 错误消息... :(
------------更新 3-------
我尝试了全新安装的 laravel 并且运行良好,所以它来自我的主要 Laravel 应用程序,还尝试将每个 composer 依赖项安装到 Laravel 的全新安装中,无论用户登录状态如何,仍然可以正常运行,所以这与我的依赖项没有冲突。
【问题讨论】:
-
@LaraDev 你的挖掘绝对是正确的。