Php 拉威尔社交名流:无效状态例外(有时)

Php 拉威尔社交名流:无效状态例外(有时),php,laravel-socialite,Php,Laravel Socialite,我网站上的一些用户正在体验 aLaravel\Socialite\Two\InvalidStateException。我已采取答复中概述的步骤,但未能解决该问题。只有一小部分用户似乎正在经历这种情况 我有两个fpm/nginx docker容器,位于HAProxy负载平衡器后面。我敢打赌,出现问题的原因是负载平衡器。我的理论是: 粘性会话:如果您的负载平衡器没有正确配置粘性会话,一些用户可能会在服务器1上启动新会话,并在以下请求下在服务器2上结束会话,这可能会引发Laravel\Socialit

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


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

我敢打赌,出现问题的原因是负载平衡器。我的理论是:

  • 粘性会话:如果您的负载平衡器没有正确配置粘性会话,一些用户可能会在服务器1上启动新会话,并在以下请求下在服务器2上结束会话,这可能会引发
    Laravel\Socialite\Two\InvalidStateException

  • 请求超时:我不确定这一点,但可能您的会话生命周期不足以完成某些进程,该进程也会引发
    Laravel\Socialite\Two\InvalidStateException


  • 如果将laravel会话存储更改为分散数据库而不是默认的文本文件配置,则可能会解决该异常。

    这似乎是包中的无效状态问题,该问题已在该包中解决

    您的一些用户使用不同的url(或)访问您的网站,因此导致会话中的“状态”不匹配

    如果你在5.3级及以上。。。添加一个
    会话\u域=http://example.com
    .env
    文件中的

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


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

    在生产环境文件中,只需添加SESSION\u DOMAIN=即可由config/SESSION.php获取。对于本地开发,您不需要它。

    替换

    Socialite::driver('google')->user();
    
    遵守这一准则

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

    任何社交

    请尝试@KareemEssawy中的答案,指出out是一个巨大的安全问题。您可能可以在开发环境中尝试解决问题的原因,是登录功能还是其他原因,您是否也使用社交名将OAuth身份验证用于Facebook?请尝试此操作—删除所有会话并让用户重新登录。会话将保留在外部
    redis
    实例中,这两个
    nginx/fpm
    容器共享用于会话存储。这难道不能消除粘性会话理论吗?是的,这不是一个粘性会话问题。是否通过API进行身份验证?读到redis关于社交名媛的文章,我觉得这可能会有帮助。所以。。。也许我是个无国籍的人。用户登录后,我使用令牌从他们的API获取更多数据。在这个场景中使用无状态是否合适?您是否发现了问题所在?我是说,你的后端和前端分开了吗?您的应用程序是否使用oauth或类似软件对用户进行身份验证?它在一周前随机停止出现。虽然我可以确认我已经10多天没有接触过这个过程了。所以我不知道你对localhost做了什么?我想简单地写一下localhost,或者如果你有一个端口,那么你的答案底部的
    社交
    是什么意思?