(node.js, express) APIでログインするときにセッションが消えてうまくログインできないことがあった
node.js + expressで開発をしたときに、APIでログインするときにセッションが消えてうまくログインできないことがあった。
まず、以下のようなことをやってみた。
req.json
などで返す前に明示的にsession.save(() => ...)
でセッションを保存- クライアントでの
fetch
のオプションにcredentials: 'include'
を指定 - サーバで返すときに
res.header('Access-Control-Allow-Credentials','true');
とヘッダーを指定
これは関係なかったようで、解決せず、結局以下のことが原因だった。
- ログインのAPIをGETで叩いていた。(別のAPIを転用したため)
- 別のGET APIで短期間で2回アクセスしたら304 not modifiedが返っていたため、ログインの結果が反映されていなかった。毎回
Last-Modified
ヘッダーを指定することで解決。 - APIを同時に複数アクセスしていたため、セッションクッキーの更新が競合していた(言われてみれば当然だが...)。最初にログインAPIだけ投げるようにした。
ChromeのDeveloper Toolsのnetworkで、リクエストのタイミングとか載ってきているcookieとかを見るとこういうことをデバッグできることを知った。