AbstractProvider.php第200行中的Laravel Socialite InvalidStateException

时间:2016-12-13 08:14:47

标签: laravel-5 laravel-socialite

我使用laravel 5.3在本地系统(Ubuntu-14.04 64Bit)中构建Web应用程序。我使用Socialite从社交网络登录。我配置了G +,Facebook,GitHug。我使用Chromium作为默认浏览器。最后问题是我得到了

  

AbstractProvider.php第200行中的InvalidStateException

频繁。我试过了

  

php artisan cache:clear

     

php artisan config:clear

     

composer dump-autoload

这些有助于暂时解决问题,再次引发问题。

请在这个问题上帮助我..

5 个答案:

答案 0 :(得分:1)

我得到了那个例外,因为&#39;州&#39;没有在会话中保存。但我使用asPopup方法 - <input type="radio" name="player"/>MS Dhoni <br /> <input type="radio" name="player" />Virat Kohli<br /> <input type="radio" name="player"/> Sachin Tendulkar <br/>所以我保存了会话 - Socialite::driver('facebook')->asPopup()->redirect();。所以我解决了这个问题。

或尝试

$request->session()->save();

它有效

答案 1 :(得分:0)

如果AbstractProvider.php行200在用户状态不存在时触发异常,则表示无法创建用户。

如果您从提供商处获得详细信息(facebook,github),请首先检查您的代码,如果您创建了一个用户并将其退回。

如果您已经管理并登录了您的应用,并且您从用户表中删除了该用户,请记住还要从社交名表帐户表中删除该数据。

答案 2 :(得分:0)

我有同样的问题,我已经阅读了很多相关信息,这取决于您在登录请求时的URL是否具有www。在开始与否。 进入config\services.php,如果您将重定向设置为http://sitename.tld/callback/facebook,则当您从sitename.tld发送登录请求时,oauth会起作用,而如果您从www.sitename.tld尝试,则会获得异常。

我还不知道如何在开头使用和不使用www。

答案 3 :(得分:0)

我遇到了同样的问题,并通过3个步骤解决了该问题;

  1. 在顶部添加请求 使用Illuminate \ Http \ Request;

  2. 将请求对象传递给函数

    公共函数handleProviderCallback(Request $ request)         {             尝试{                 $ user = Socialite :: driver('facebook')-> user();             } catch(Exception $ e){                 抛出新的异常;             }     }

  3. 清除缓存。 php artisan cache:clear

答案 4 :(得分:0)

我有同样的错误,但是我的解决方法有所不同。我在这里发布,以防其他人像我一样继续点击此帖子以寻求可能的答案。

我在Ubuntu 18.04桌面上进行开发,因为它是带有GUI的服务器。 Socialite在本地运行良好,但是当我通过git将更改推/拉到服务器时,它就退出了。

我通过记录发送给Google和来自Google的内容来运行跟踪。在Socialite有机会获取信息之前,我“ dd($ _ GET)”进行了原始转储,因此我知道存储了什么并可以使用。所有信息都在那里,但是Socialite似乎没有“看到”它。那就是我认为这是我的apache2标头配置干扰了cookie /会话数据。

我在apache2配置中设置了标头安全性。设置之一是

Header always edit Set-Cookie ^(.*) "$1;HttpOnly;Secure;SameSite=Strict"

此设置干扰了社交名流所需的Cookie信息。我从apache2标头配置中删除了该设置(通过注释掉),然后重新启动了Apache。最后,为了确定,我删除了storage / framework / session / *中的所有会话,并从浏览器中清除了它们。那对我有用。

在我开始工作之后,一个接一个地启用并测试了以下每个设置,以使框架安全地保护其可以提供的头信息:

SESSION_SECURE_COOKIE=true

在我的.env文件中

'http_only' => true,'same_site' => 'lax'(设置为“严格”似乎无效)
在我的config / session.php文件中。

现在,它又回到了测试安全性并在需要时进行调整。