调用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
相关产品推荐
相关产品推荐

