💩

`express-session`でセッション情報が渡らない

2022/04/29に公開

Node.js + express-sessionにてreq.session.useridが渡らないということがありました。
signin.jsで発効したuseridセッションindex.jsへ渡すことを目的としています。

先に結論です。

app.js
app.use(session({
  secret: 'the secret',
  resave: false,
  saveUninitialized: true,
  cookie: { secure: true } // ここを削除
}))

背景

ここでセッションを発効して

route/signin.js
req.session.userid = results.rows[0].id;

route/index.jsで受け取りたいが、、、

route/index.js
router.get('/', (req, res, next) => {
  const isAuth = Boolean(req.session.userid);
  console.log(req.session)

req.session.userid = undefinedとなってしまっていました。
これでは、ログイン状況によってページを出し分けるような処理ができません。

原因

公式にて注意されていました。ゴメンナサイ。

Note be careful when setting this to true, as compliant clients will not > send the cookie back to the server in the future if the browser does not > have an HTTPS connection.

HTTPS接続じゃないなら、機能しないで。ってことだったみたいです。
localhost:3000がそうじゃないための、不具合だったのかなと。

Discussion