自己做的購物網站 side project出問題
入口網站:
https://infinite-beach-24731.herokuapp.com/users/login
github:
https://github.com/HUANG-SIH-MAN/shopping-website
問題
使用者在結帳完後,有時候會成功回到結帳成功頁面,有時候會回到登入頁面,初步判定原因是因為cookies設定,再從藍新金流回到購物網站後,有時會重新設定cookies,而目前登入狀態的儲存是寫在 session ,因此才會跳轉到登入頁面,導致結帳失敗
嘗試過的解決方式
1.有仔細去比較過兩種情況下,差異點會在哪裡
結帳成功:
a.通常一進入網頁馬上選商品直接結帳,整體流程不要超過3分鐘左右,都可以成功
b.cookie紀錄不會重新設定
結帳失敗:
a.進入網站後逛久一點,通常都會出現交易失敗的問題
b.cookie紀錄會重新設定
2.嘗試改寫過session的resave、saveUninitialized設定也沒用
3.找過一些資料但沒有看到解決的方法 (ex::Cache)
4.在slack上有提問過,佳安學姊有提到Chrome更新cookie規範,必須設定成sameSite: 'none', secure: true
a.後續我也有找到google寫的說明文件,按照上面的說明設定無法解決我遇到的問題
b.在session內更改cookie設定,改成以下形式
app.use(session({ secret: process.env.sessionSecret, name: 'user', resave: false, saveUninitialized: true, cookie: { sameSite: 'none', secure: true } }))
但會導致連正常登入都無法實踐,用console.log找出原因,會卡在passport的反序列化步驟,無法正常從session取得登入的使用者資料
c.讓所有路由的cookie設定做更改,可以正常登入,但結帳完依舊會又被登出的問題
app.use((req, res, next) => { res.cookie({ sameSite: 'none', secure: true })
})
5.有想過要改變session儲存的位置,改用redis或資料庫,但後來想了一下,這樣做並不會改變session ID會儲存在cookie的情形。
在麻煩助教幫我看一下,這個問題已經困擾我一個多月了!!
參考資料