[英]Laravel Socialite: InvalidStateException (sometimes)
我網站上的一些用戶遇到了Laravel\\Socialite\\Two\\InvalidStateException
。 我已經采取了對Laravel Socialite: InvalidStateException的回復中概述的步驟,但未能解決該問題。 似乎只有一小部分用戶遇到了這種情況。
我有 2 個 fpm/nginx docker 容器位於 HAProxy 負載均衡器后面。
您的一些用戶正在使用不同的網址( 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'
希望這能解決問題。
我敢打賭,問題是由於負載平衡器而出現的。 這是我的理論:
粘性會話:如果您的負載均衡器沒有正確配置粘性會話,則某些用戶可能會在服務器 1 上啟動一個新會話,並且在接下來的請求中它會在服務器 2 上結束,這可能會拋出Laravel\\Socialite\\Two\\InvalidStateException
請求超時:我不確定這一點,但是,也許你的會話生命周期不足以完成一些也會拋出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.