使用Laravel 5.7 Facebook Socialite登录中的GET请求观察奇怪的行为。突然停止工作,这是我发现的东西:
code
的形式返回url到我的回调函数,如下所示:请求网址:
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)
Socialite希望代码在
下可用 \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)
注意在回调的前面少了一个斜线,但实际上它仍然存在...应该只是代码和状态变量。任何人都可以在虚拟主机上发现我做错了什么吗?看起来库存标准...
我对如何进一步调试请求失败的想法感到困惑,显然也不愿更改Socialite代码。尝试通过查询和输入进行访问-结果相同...
更新
下面的答案是正确的。编辑Nginx Vhost以反映已解决的问题:
location / {
try_files $uri $uri/ /index.php$is_args$args;
}
越来越多的在线发现的有关使用Laravel设置Nginx的教程的设置都错误。很高兴在这里收集此信息。
答案 0 :(得分:2)
这是将请求重定向到laravel的public/index.php
的问题。
它位于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