req.isAuthenticated()是否在重定向上更改?

时间:2019-01-11 21:29:30

标签: javascript node.js express passport.js passport-local

  1. 用户提交登录POST数据。 Passport.js进行身份验证。 req.isAuthenticated()true
  2. 将用户从登录路径重定向到首页
    • 在单行路线中,req.isAuthenticated()现在为false
    • 重新加载主页(浏览器GET)。现在,首页req.isAuthenticated()读取true,并在后续请求中保持true直到注销。

我会说,这种情况约占80%。重定向和后续重新加载时,其他20%的漫游req.isAuthenticated()true

我找到了similar question,但是我认为答案似乎不正确,正如评论所指出的那样,并且由于我的设置,随后的请求都经过了正确的身份验证,直到注销为止。

router.post('/sign_in', (req, res) =>
{
    passport.authenticate
    (
        'local',
        (err, user, info) =>
        {
            if(!err && user)
            {
                req.logIn(user, (err) =>
                {
                    if(!err)
                    {
                        console.log('s', req.isAuthenticated()); // <-- true
                        res.setHeader('Cache-Control', 'no-cache');
                        return res.redirect('/');
                    }
                });
            }
        }
    )(req, res);
}

然后:

router.get('/', async (req, res) =>
{
   console.log('h', req.isAuthenticated()); // <-- false ???
   res.send();
}

如果有关系,我的会话设置如下:

app.use
(
    session
    ({
        store             : //...
        secret            : process.env.SESSION_SECRET,
        resave            : false,
        saveUninitialized : true,
        cookie            :
        {
            httpOnly : false,
            secure   : false,
            maxAge   : null
        }
    })
);

如何解决?

1 个答案:

答案 0 :(得分:1)

该问题似乎是由错误引起的。参见:

解决方法是在重定向之前保存会话。

req.session.save(() =>
{
    return res.redirect('/');
});