laravel - Laravel GET 请求变量与 url 混淆
问题描述
在 Laravel 5.7 Facebook Socialite 登录中观察 GET 请求的奇怪行为。突然停止工作,这是我发现的:
- 在用户单击登录时,使用 facebook 重定向正常工作,返回
code
到我的回调函数的 url 中的 get 变量,如下所示:
请求网址:
https://mysite.loc/callback?code=AQD3hC5MTa&state=TvFnYlXwfJsqKm6ZoDbC
Request Method: GET
Status Code: 200 OK
查询字符串参数
code: AQD3hC5MTaJe
state: TvFnYlXwfJsqKm6ZoDbC6I9IaIYWDT4vgvxxx3P4
到目前为止一切顺利,现在到我的回调函数中调试奇怪的东西:
var_dump(\Request::input());
产生:
array (size=2)
'//callback?code' => string 'AQD3hC5MTaJe' (length=344)
'state' => string 'TvFnYlXwfJsqKm6ZoD' (length=40)
社交名流希望代码可以在
\Request::input('code')
这不是我的情况
\Request::input('//callback?code')
我见过的最奇怪的事情。我在运行 Linux 的 Docker 上使用 NGINX。路线:
Route::get('/redirect', 'SocialAuthFacebookController@redirect');
Route::get('/callback', 'SocialAuthFacebookController@callback');
函数签名:
public function callback(SocialFacebookAccountService $service);
更新
Nginx Vhost 有:
location / {
try_files $uri $uri/ /index.php?/$request_uri;
}
更新为:
try_files $uri $uri/ /index.php?$request_uri;
这让事情变得更好了,现在调试的结果是:
array (size=2)
'/callback?code' => string 'AQD3hC5MTaJe' (length=344)
'state' => string 'TvFnYlXwfJsqKm6ZoD' (length=40)
注意回调前面少了一个斜线,但它仍然确实存在......应该只是代码和状态变量。任何人都可以发现我在虚拟主机上做错了什么?看起来库存标准...
我被困在如何进一步调试请求失败的想法上,显然也不愿意更改社交名流代码。已尝试通过查询和输入进行访问-结果相同...
更新
下面的答案是正确的。编辑 Nginx Vhost 以反映已解决的问题:
location / {
try_files $uri $uri/ /index.php$is_args$args;
}
令人难以置信的是,在网上找到的使用 Laravel 设置 Nginx 的任何教程都有错误的设置。很高兴在这里收集这些信息。
解决方案
这是将请求重定向到public/index.php
laravel 的问题。
它要么在 nginx 的 vhost 声明中,要么在你的 .htaccess 中
基本上,它越来越https://mysite.loc/callback?code=AQD3hC5MTa&state=TvFnYlXwfJsqKm6ZoDbC
将其重定向到
https://mysite.loc/index.php?//callback?code=AQD3hC5MTa&state=TvFnYlXwfJsqKm6ZoDbC
代替
https://mysite.loc/index.php/callback?code=AQD3hC5MTa&state=TvFnYlXwfJsqKm6ZoDbC
ps:重定向示例中使用的域名和协议https://mysite.loc/
只是为了说明。nginx 并没有做到这一点
更新:这是我在我的 nginx 虚拟主机中放入的内容
/index.php$is_args$args
推荐阅读
- bash - 我可以让 curl 使用代理而不更改其命令行参数吗?
- python - Python:动态处理不同的日期时间格式
- r - 计算报告进口商/出口商之间的价值差距 [R}
- excel - 将关闭的工作簿中的整列复制到打开的工作簿中
- c++ - 如何修复 IDA pro call analysis failed 错误?
- sympy - 有没有办法使用 SymPy 来解决这个问题?
- vb.net - VB.net 2019 Selenium 无法获取元素的字体颜色
- c - ARM Neon 内在函数,两个向量相加
- jenkins - 与 Jenkins 和 GHCR 合作;github 应用程序可以通过身份验证来推送 docker 映像吗?
- vue.js - 我无法从 ajax 结果加载 vue 动态组件