0

セッション Cookie をセキュアに設定しようとしている Express アプリケーションがあります。これまでのところ、以下のコードを試しました:

app.use(express.cookieParser());
sessionOptions = definitions.REDIS;
sessionOptions.ttl = definitions.session.expiration;
app.use(express.session({
  secret: definitions.session.secret,
  cookie: {                 <---------------------------- Added this
    secure: true
  },
  store: new RedisStore(sessionOptions)
}));
app.use(passport.initialize());
app.use(passport.session());
app.use(express.bodyParser());
app.use(express.csrf());
app.use(function(req, res, next) {
  res.locals.token = req.session._csrf;
  return next();
});

しかし、ログインしようとすると CSRF トークンが検証されず、禁じられたエラーが発生します。セッション Cookie を安全にし、CSRF トークンを使用するにはどうすればよいですか?

4

1 に答える 1

0

これが私が使用するものです。returnbeforeは必要ないと思いますが、それnext()があなたの問題かどうかはわかりません。

app
.set('view engine', 'jade')
.set('views', __dirname + '/../views')
.set('json spaces', 2)
.use(express.compress())
.use(express.cookieParser('our secret'))
.use(express.session({
  store: new RedisStore({
    port: config.redisPort,
    host: config.redisHost,
    db: config.redisDatabase,
    pass: config.redisPassword
  }),
  proxy: true,
  cookie: { httpOnly: true, secure: true }
}))
.use(express.bodyParser())
.use(express.methodOverride())
.use(express.csrf())
.use(function (req, res, next) {
  res.cookie('XSRF-TOKEN', req.csrfToken());
  res.locals.csrftoken = req.csrfToken();
  next();
})
.use(everyauth.middleware());

proxy: trueHeroku には が必要です。req.session._csrf最新バージョンの Express では廃止されていることに注意してください。

于 2013-11-04T23:06:33.200 に答える