Laravel 社交名流:InvalidStateException(有时)

Posted

技术标签:

【中文标题】Laravel 社交名流:InvalidStateException(有时)【英文标题】:Laravel Socialite: InvalidStateException (sometimes) 【发布时间】:2018-06-25 08:25:39 【问题描述】:

一些我网站上的用户正在经历 Laravel\Socialite\Two\InvalidStateException。我已采取对Laravel Socialite: InvalidStateException 的回复中概述的步骤,但未能解决问题。似乎只有一小部分用户遇到了这种情况。

我有 2 个 fpm/nginx docker 容器位于 HAProxy 负载平衡器后面。

【问题讨论】:

在***.com/questions/29629287/…试试答案 @KareemEssawy 评论这是一个巨大的安全问题 可能您可以在开发环境中尝试导致问题的原因,是登录功能还是其他原因,您是否也使用 Socialite 进行 Facebook 的 OAuth 身份验证? 试试这个***.com/questions/30660847/… 只需删除所有会话并让人们重新登录。 【参考方案1】:

这似乎是socialite 包中的无效状态问题,已在此post 中解决。

您的一些用户正在使用不同的网址(https://www.example.com 或 https://example.com)访问您的网站,从而导致会话中的“状态”不匹配。

如果您使用的是 Larvel 5.3 及更高版本...在 .env 文件中添加 SESSION_DOMAIN=http://example.com

对于其他版本,请转到您的 config/session.php 文件,然后添加您的域。 'domain' => 'www.example.com'

立即应用更改。运行'php artisan cache:clear''composer dump-autoload' 希望这能解决问题。

【讨论】:

本地主机做什么? 我想简单地写 localhost 或者如果你有一个端口做 127.0.0.1:80 @ConnorLeech 对于 localhost 阶段,google 将忽略它,此解决方案仅适用于生产阶段【参考方案2】:

我敢打赌,问题是由于负载平衡器而出现的。这是我的理论:

    粘滞会话:如果您的负载平衡器没有正确配置粘滞会话,则某些用户可能会在服务器 1 上启动新会话,并在随后的请求中在服务器上结束2 这可能是在抛出Laravel\Socialite\Two\InvalidStateException

    请求超时:我不确定这一点,但是,也许您的会话生命周期不足以完成一些也会引发Laravel\Socialite\Two\InvalidStateException

    李>

也许如果您将 laravel 会话存储更改为分散式数据库而不是默认的文本文件配置,则异常会得到解决。

【讨论】:

会话保存在外部redis 实例中,两个nginx/fpm 容器共享用于会话存储。这不会消除 Sticky Sessions 理论吗? 那么是的,这不是粘性会话问题。是否通过 API 进行身份验证?阅读使用 redis 的社交名流发现这个socialite stateless authentication 可能会有帮助。 所以......也许我误解了无国籍。用户登录后,我使用我的令牌从他们的 API 获取更多数据。在这种情况下使用无状态是否适合我? 您发现问题所在了吗?我的意思是,你的后端和你的前端是分开的吗?您的应用是否使用 oauth 或类似方式对用户进行身份验证? 它在一周前随机停止显示。虽然我可以确认我已经 10 多天没有接触过这个过程。所以我不知道【参考方案3】:

在您的生产环境文件中添加 SESSION_DOMAIN=http://example.com 以供您的 config/session.php 获取。对于本地开发,您将不​​需要它。

【讨论】:

【参考方案4】:

替换

Socialite::driver('google')->user();

到这个代码

Socialite::driver('google')->stateless()->user();

任何社交(任何社交登录,如 facebook github 等)

【讨论】:

答案底部的any social 是什么意思?

以上是关于Laravel 社交名流:InvalidStateException(有时)的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 社交名流:InvalidStateException(有时)

Laravel JWT 和社交名流插件

在 laravel 中使用社交名流登录 Facebook

如何减少 Laravel 5 中的社交名流范围?

Laravel 5.2.31 社交名流证书 ssl 错误

社交名流 laravel 5.4 Facebook 提供商