NodeJS 路由之间的会话数据似乎不持久

hgc7kmma  于 2022-11-29  发布在  Node.js
关注(0)|答案(1)|浏览(122)

我使用中间件来检查用户是否登录以查看某些页面,这些页面是我在登录路径之外的单独文件中声明的。中间件将req.originalUrl添加到req.session.returnTo字段中。我在登录路径中使用passport.authenticate将用户序列化到会话中,但当它这样做时,不知何故它会拿走req.returnTo字段?我不知道。我不明白为什么。
我正在使用的中间件:

module.exports.isLoggedIn = (req, res, next) => {
    if(!req.isAuthenticated()){
        req.session.returnTo = req.originalUrl;
        req.flash('error', 'Must be Signed in first');
        res.redirect('/login');
    }
    else{
        next();
    }
}

当我尝试在登录路由中使用req.returnTo字段时,它没有出现:-

router.post('/login', passport.authenticate('local', { failureFlash: true, failureRedirect: '/login' }), (req, res) => {
    req.flash('success', 'Welcome back !');
    const redirectUrl = req.session.returnTo || '/campgrounds';
    res.redirect(redirectUrl);
})

redirectUrl值为空

uyhoqukh

uyhoqukh1#

尝试按如下所示保存会话数据

module.exports.isLoggedIn = (req, res, next) => {
    if(!req.isAuthenticated()){
        req.session.save(function(err) {
         // session saved         
        req.session.returnTo = req.originalUrl;
        })
        req.flash('error', 'Must be Signed in first');
        res.redirect('/login');
    }
    else{
        next();
    }
}

相关问题