🐈

express-sessionでcookieが保存されないとき

2023/09/20に公開

Nest.jsでこんなふうにsessionを使って、cookieに情報を保存したい。

@Get()
findAll(@Session() session: Record<string, any>) {
  session.visits = session.visits ? session.visits + 1 : 1;
}

https://docs.nestjs.com/techniques/session

しかしフロントエンドから実行してもブラウザにcookieに保存されない。

色々調べていたらこちらの記事を発見。
https://stackoverflow.com/questions/72849595/browser-is-not-receiving-and-not-sending-cookies-with-requests-react-nestjs

とても基本的な間違いで、axiosでrequestするときにwithCredentialsがtrueになっていなかった。

const API = axios.create({ 
  baseURL: 'http://localhost:5000',
  withCredentials: true,
});

以前もこの設定で間違えていたのでメモしておく。

Same siteのエラーでset cookieがエラーになるとき

deployして本番環境で、same siteのエラーが出てset cookieが失敗するときがある。
その場合は、cookie: { secure: true, sameSite: 'none' }、cookieの設定を追加。

  app.use(
    Session({
      name: 'session-name',
      secret: 'session-secret'
      resave: true,
      saveUninitialized: true,
      cookie: { secure: true, sameSite: 'none' }
    })
  )

Discussion