【问题标题】:Laravel Socialite InvalidStateException in AbstractProvider.php line 200AbstractProvider.php 第 200 行中的 Laravel Socialite InvalidStateException
【发布时间】:2017-04-28 05:36:07
【问题描述】:

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

AbstractProvider.php 第 200 行中的 InvalidStateException

经常。我试过了

php 工匠缓存:清除

php 工匠配置:清除

作曲家转储自动加载

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

请帮我解决这个问题..

【问题讨论】:

    标签: laravel-5 laravel-socialite


    【解决方案1】:

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

    如果您创建用户并返回它,请在从提供商(facebook、github)获取详细信息时首先检查您的代码。

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

    【讨论】:

      【解决方案2】:

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

      一开始我还不明白如何让它在有和没有 www 的情况下工作。

      【讨论】:

        【解决方案3】:

        我收到了这个异常,因为“状态”没有保存在会话中。但我使用的是 asPopup 方法 - Socialite::driver('facebook')->asPopup()->redirect(); 所以我保存了会话 - $request->session()->save();。所以我解决了这个问题。

        或者试试

        session()->put('state', $request->input('state'));
        $user = Socialite::driver('facebook')->user();
        

        有效

        【讨论】:

        • 这很奇怪而且不安全,因为在回调时我们应该比较会话状态和请求参数状态值。
        【解决方案4】:

        我有同样的问题,分三步解决;

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

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

          公共函数handleProviderCallback(请求$request) { 尝试 { $user = Socialite::driver('facebook')->user(); } 捕捉(异常 $e){ 抛出新异常; } }

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

        【讨论】:

          【解决方案5】:

          我遇到了同样的错误,但我的解决方案有点不同。我在这里发帖,以防其他人像我一样继续点击这篇文章以获得可能的答案。

          我在 Ubuntu 18.04 桌面上开发,因为它是一个带有 GUI 的服务器。社交名流在本地工作得很好,但是一旦我通过 git 将更改推送/拉到服务器,它就退出了。

          我通过记录发送到谷歌和从谷歌发送的内容来运行跟踪。在社交名流有机会获得信息之前,我“dd($_GET)”得到了一个原始转储,这样我就知道存储了什么并准备好使用。所有信息都在那里,但社交名流似乎没有“看到”它。那时我推断是我的 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 文件中。

          现在又开始测试安全性并在需要时进行调整。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2020-07-07
            • 2015-06-20
            • 1970-01-01
            • 2018-03-22
            • 2016-01-29
            • 2018-01-05
            相关资源
            最近更新 更多