Laravel 5在AbstractProvider.php中创建InvalidStateException

Dip*_*ora 8 php facebook laravel laravel-5

我正在尝试使用Socializelaravel 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();
    }
});
Run Code Online (Sandbox Code Playgroud)

登录成功,我得到代码,但get $provider->user()我得到错误的时间.

AbstractProvider.php第161行中的InvalidStateException

小智 13

http://nhagiaodich.com/dang-nhap

它可以在我的网站上运行,只需在获取用户之前调用 - > stateless()

Socialite::driver('facebook')->stateless()->user()
Socialite::driver('google')->stateless()->user()
Run Code Online (Sandbox Code Playgroud)


Kry*_*ten 12

我只是评论出发出错误的代码(如在@Dipesh Shihora的回答中),我感到很不舒服,所以我再挖一点.我发现错误是由于会话问题引起的(至少在我的情况下).

我的开发服务器是根据本答复中给出的说明设置的.基本上,我通过使用看似公共可访问地址的回调网址"欺骗"Google.

这个InvalidStateException问题出现了,因为我正在访问我的登录页面http://localhost/login并重定向到Google的登录页面,然后返回给我http://myapp.example.com/callback.问题是会话密钥存储在cookie中 - 它最初是一个cookie http://localhost,但是当我重定向到另一个URL时,cookie(以及会话密钥)无法访问.因此,state更新后会话值不存在并抛出异常.

解决方案?确保我在开发机器上的所有浏览都是在,http://myapp.example.com而不是在http://localhost.


Mat*_*ias 5

'domain'尝试在字段config/session.php'url'字段中设置正确的值config/app.php。这似乎对我有用。我注意到, 中的值session.php应该是 without http://,而 中 的值app.php应该是 with http://

另外,我建议您遵循本指南: https: //laracasts.com/series/whats-new-in-laravel-5/episodes/9。这非常有帮助且清晰。


Dip*_*ora -7

我为此找到了临时解决方案。

public function user()
{
    //if ($this->hasInvalidState()) {
    //    throw new InvalidStateException;
    //}

    $user = $this->mapUserToObject($this->getUserByToken(
        $token = $this->getAccessToken($this->getCode())
    ));
    return $user->setToken($token);
}
Run Code Online (Sandbox Code Playgroud)

注释AbstractProvider.php$this->hasInvalidState()文件中的 if 条件,它工作正常。

  • 您永远不应该注释掉给您带来错误的代码,而应该修复错误。投了反对票。 (3认同)