req.session.returnTo 未定义

Som*_*der 2 javascript oauth-2.0 express passport.js express-session

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

我尝试将 URL 存储在会话中,如此处所述但它不会保留到下一个请求。

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

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

认证路线:

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;
});

Run Code Online (Sandbox Code Playgroud)

console.log 显示用户已成功通过身份验证,但 returnTo 字段不再存在。

小智 9

嗨,我遇到了同样的问题。尝试添加keepSessionInfo: truepassport.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;
});
Run Code Online (Sandbox Code Playgroud)

  • 这对于任何试图在 Udemy 上关注 Colt Steele 的 The Web Developer Bootcamp 2023 的人来说都是相关的,因为他没有在他的教程中使用它(自从教程最初制作以来,它一定是新引入的东西)。但谢谢你回答这个问题!当然,这让我免去了很多挫败感。 (3认同)