【问题标题】:req.isAuthenticated() changes on redirect?req.isAuthenticated() 重定向更改?
【发布时间】:2019-01-11 21:29:30
【问题描述】:
  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
        }
    })
);

如何解决这个问题?

【问题讨论】:

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


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2017-02-21
      • 2020-03-04
      • 2017-05-16
      • 2014-09-13
      • 2017-01-20
      • 2012-04-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多