我正在尝试使用Socialize在laravel 5中使用facebook登录.
Route::get('fb',function ($facebook = "facebook") { $provider = \Socialize::with($facebook); if (Input::has('code')) { $user = $provider->user(); return var_dump($user); } else { return $provider->scopes(['public_profile','user_friends'])->redirect(); } });
登录成功,我得到代码,但得到$provider-> user()的时间我得到错误.
InvalidStateException in AbstractProvider.PHP line 161
我只是评论出发出错误的代码(如在@Dipesh Shihora的回答中),我感到很不舒服,所以我进一步挖了一下.我发现错误是由于会话问题引起的(至少在我的情况下).
我的开发服务器是根据this answer中给出的说明设置的.基本上,我通过使用看似公共可访问地址的回调URL“欺骗”Google.
InvalidStateException问题出现在我面前,因为我正在http:// localhost / login访问我的登录页面并重定向到Google的登录页面,然后返回http://myapp.example.com/callback.问题是会话密钥存储在cookie中 – 它最初是http:// localhost的cookie,但是当我重定向到不同的URL时,cookie(以及会话密钥)无法访问.因此,更新后会话状态值不存在并抛出异常.
解决方案?确保我在开发计算机上的所有浏览都是在http://myapp.example.com上完成的,而不是在http:// localhost上完成的.