【问题标题】:req.isAuthenticated() never evaluates to truereq.isAuthenticated() 永远不会评估为 true
【发布时间】:2020-10-22 12:51:39
【问题描述】:

我正在尝试如下实现用户身份验证:

userRouter.post("/login", passport.authenticate("local", { session: false }), (req, res) => {
    if (req.isAuthenticated()) {
        const { _id, username } = req.user;
        const token = signToken(_id);
        res.cookie("access_token", token, { httpOnly: true, sameSite: true });
        res.status(200).json({ isAuthenticated: true, user: { username } });
    }
});

但为了能够添加一些自定义消息,我使用以下替代方法:

userRouter.post('/login', (req, res, next) => {
    passport.authenticate('local',{ session: false }, (err, user, info) => {
        if (req.isAuthenticated()) {
            const { _id, username } = req.user;
            const token = signToken(_id);
            res.cookie("access_token", token, { httpOnly: true, sameSite: true });
            res.status(200).json({ isAuthenticated: true, user: { username } });
        }
        if (err) return next(err)
        if (info)
            res.status(400).json({ message: { msgBody: info.message, msgError: true } });
    })(req, res, next);
});

但是,在第二种选择中,req.isAuthenticated() 似乎从未被评估为真。

谁能帮我理解为什么?

谢谢

【问题讨论】:

    标签: javascript node.js reactjs express passport.js


    【解决方案1】:

    护照文档说“请注意,使用自定义回调时,应用程序负责建立会话(通过调用 req.login())并发送响应。” (http://www.passportjs.org/docs/authenticate/)

    以如下代码为例:

    app.get('/login', function(req, res, next) {
      passport.authenticate('local', function(err, user, info) {
        if (err) { return next(err); }
        if (!user) { return res.redirect('/login'); }
        req.logIn(user, function(err) {
          if (err) { return next(err); }
          return res.redirect('/users/' + user.username);
        });
      })(req, res, next);
    }); 
    

    不知道是不是说你是因为需要调用登录方法而没有通过身份验证?

    【讨论】:

    • 真的很难说和调试,因为我在代码的任何地方都没有真正得到任何错误:(
    • 您是否尝试过像示例一样调用 req.logIn 并为此在回调中测试 isAuthenticated ?
    猜你喜欢
    • 1970-01-01
    • 2023-03-09
    • 1970-01-01
    • 2016-10-12
    • 2014-12-29
    • 1970-01-01
    • 2017-08-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多