自己做的購物網站 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的情形。

在麻煩助教幫我看一下,這個問題已經困擾我一個多月了!!

參考資料

res.cookie(name, value [, options])