You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

调用passport.authenticate()后session中returnTo丢失,求解决方案

Session中returnTo键调用passport.authenticate()后丢失问题

我将跳转URL存储在session的returnTo键中,未调用passport.authenticate()中间件时该键可正常保留,但调用此中间件后session内所有键均丢失。控制台显示调用passport.authenticate()前session存在returnTo键,调用后丢失。相关代码如下:

1. 存储returnTo的isLoggedin函数

isLoggedin: async (req, res, next) => {
    if (!req.isAuthenticated()) {
      req.session.returnTo = req.originalUrl;
      req.flash("error", "Please login");
      await req.session.save();
      return res.redirect("/login");
    }
    next();
  },

2. 登录POST请求处理(含session日志)

router
  .route("/login")
  .get(authentication.loginrender)
  .post(
    (req, res, next) => {
      console.log(req.session);
      next();
    },
    passport.authenticate("local", {
      failureFlash: false,
      failureRedirect: "/login",
    }),
    (req, res, next) => {
      console.log(req.session);
      next();
    },
    authentication.loginuser
  );

3. app.js相关配置

app.set("view engine", "ejs");
app.set("views", path.join(__dirname, "views"));
app.engine("ejs", ejsmate);
app.use(express.static(path.join(__dirname, "public")));
app.use(express.urlencoded({ extended: true }));
app.use(cookieparser());
const sessionConfig = {
  secret: "thisshouldbeabettersecret!",
  resave: false,
  saveUninitialized: true,
  cookie: {
    httpOnly: true,
    expires: Date.now() + 1000 * 60 * 60 * 24 * 7,
    maxAge: 1000 * 60 * 60 * 24 * 7,
  },
};
app.use(session(sessionConfig));
app.use(passport.initialize());
app.use(passport.session());
passport.use(new localstrategy(User.authenticate()));
app.use(flash());
passport.serializeUser(User.serializeUser());
passport.deserializeUser(User.deserializeUser());

内容的提问来源于stack exchange,提问作者AKSHAT KOTHAVADE

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 19:40:36