Laravel GET请求变量与url

时间:2018-10-24 11:26:06

标签: laravel laravel-socialite laravel-request

使用Laravel 5.7 Facebook Socialite登录中的GET请求观察奇怪的行为。突然停止工作,这是我发现的东西:

  1. 在用户单击时,使用Facebook重定向登录即可正常工作,并以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的教程的设置都错误。很高兴在这里收集此信息。

1 个答案:

答案 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