問題
我們的程式架構是使用 React (簡稱 F) + ASP.NET Core API (簡稱 B),
在 Local 開發時,會呼叫 B API 進行登入並寫下帳號的 Cookie ,
再 Redirect 回到 前端 F。
因為 B 已有 Cookie 存在,所以 F 透過 axios 設定 withCredentials: true,
讓 F 打 API 時,會帶著 B 的 Cookie ,就可以順利呼叫 API。
今天有同事詢問,為什麼他的 Chrome 一直無法登入呢?
研究
查看後端程式會確實將 Cookie 寫進去,但在呼叫 API 時,就是不會帶著 B 的 Cookie 。
如果直接輸入 B 的 URL,又是會有 Cookie 。
但是在 F 透過 axios 去 GET B 的 URL ,就是不會有 Cookie 。
請同事改用 Edge 卻是沒問題的,會正常帶著 B 的 Cookie 。
後來同事想到他有調整 Chrome 的 第三方 Cookie的設定(chrome://settings/cookies),
他是設定成封鎖第三方 Cookie,所以透過 axios 去 Request 都不會帶著 Cookie。
將它調整回允許第三方 Cookie 就沒問題了。
參考資源
一知半解,最易僨事: 不知之謂知,知之謂不知,遇事只知皮毛,而自以為知,這種人最易壞事。