簡體   English   中英

Laravel Socialite:InvalidStateException(有時)

[英]Laravel Socialite: InvalidStateException (sometimes)

我網站上的一些用戶遇到了Laravel\\Socialite\\Two\\InvalidStateException 我已經采取了對Laravel Socialite: InvalidStateException的回復中概述的步驟,但未能解決該問題。 似乎只有一小部分用戶遇到了這種情況。

我有 2 個 fpm/nginx docker 容器位於 HAProxy 負載均衡器后面。

這似乎是無效狀態的問題交際花包,在這個已經解決

您的一些用戶正在使用不同的網址( https://www.example.comhttps://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'希望這能解決問題。

我敢打賭,問題是由於負載平衡器而出現的。 這是我的理論:

  1. 粘性會話:如果您的負載均衡器沒有正確配置粘性會話,則某些用戶可能會在服務器 1 上啟動一個新會話,並且在接下來的請求中它會在服務器 2 上結束,這可能會拋出Laravel\\Socialite\\Two\\InvalidStateException

  2. 請求超時:我不確定這一點,但是,也許你的會話生命周期不足以完成一些也會拋出Laravel\\Socialite\\Two\\InvalidStateException進程

也許如果您將 Laravel 會話存儲更改為分散式數據庫而不是默認的文本文件配置,則異常會得到解決。

在您的生產環境文件中,只需添加 SESSION_DOMAIN= http://example.com即可由您的 config/session.php 獲取。 對於本地開發,您不需要那個。

替換

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

到這個代碼

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

任何社交

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM