req.session.returnTo 未定义

问题描述 投票:0回答:2

我正在使用护照通过 discord oauth2 对我的用户进行身份验证。我希望他们被重定向回他们来自的同一页面,而不是主页或仪表板。

我尝试将 URL 存储在会话中,如 here 所述,但它不会持续到下一个请求。

需要身份验证的页面的中间件:

module.exports = (req, res, next) => {
  if (req.user) {
    next();
  }
  else {
    req.session.returnTo = req.originalUrl;
    res.redirect('/auth');
  }
};

授权路线:

router.get("/auth", passport.authenticate("discord"));

router.get("/auth/redirect", passport.authenticate("discord", {
  failureRedirect: "/auth/forbidden"
}), (req, res) => {
  console.log(req.session); // doesnt have returnTo inside anymore ?
  res.redirect(req.session.returnTo || '/');
  delete req.session.returnTo;
});

console.log显示用户认证成功,但是returnTo字段已经没有了

javascript express oauth-2.0 passport.js express-session
2个回答
6
投票

嗨,我遇到了同样的问题。尝试将

keepSessionInfo: true
添加到
passport.authenticate
.

router.get("/auth", passport.authenticate("discord", {
    failureRedirect: "/auth/forbidden", keepSessionInfo: true
}), (req, res) => {
    console.log(req.session); // doesnt have returnTo inside anymore ?
    res.redirect(req.session.returnTo || '/');
    delete req.session.returnTo;
});

0
投票

我整晚都在想这件事,想知道为什么它不起作用你是救世主!

© www.soinside.com 2019 - 2024. All rights reserved.