【问题标题】:passport.js req.user is returning: 'Promise { false }' - How do I get the current sessions' username?passport.js req.user 正在返回:'Promise { false }' - 如何获取当前会话的用户名?
【发布时间】:2020-12-31 11:47:39
【问题描述】:

在 Node.js 中,我使用 passportJS LocalStrategy 对用户进行身份验证。还有这个功能

req.getAuthenticated()

让我知道当前会话是否经过身份验证。我还希望服务器返回当前会话的用户名。为此,我尝试访问 req 的用户属性。

if(req.isAuthenticated()){
    let user = req.user.username;
}  

但它返回“未定义”。我继续...

if(req.isAuthenticated()){
    console.log(req.user);
}

它说 req.user 是一个'Promise{ false }',出于某种原因。我,然后尝试了

if(req.isAuthenticated()){
    let user = await req.user;
    console.log(user);
}

它返回“假”。这是我第一次使用 passport.js,所以我可能设置错了,因为 req.user 不应该返回承诺,对吧?有什么建议吗?

更多信息:这是我的护照序列化/反序列化和 passport.use 函数的样子:

再次,getAuthenticated 函数完美运行。当用户登录时,他们被验证,当他们没有登录时,他们没有被验证。我只是无法获取 req.user 属性。

const initialize = (passport, UserCollection, getUserFromUsername, getUserFromId) => {
    const authenticateUser = async (username, password, done) => {
        let user = await getUserFromUsername(UserCollection, username);
        if(user === null){
            return done(null, false, {message: 'The user with that username does not exist in the database.'});
        }
        try{
            if(await bcrypt.compare(password, user.password)){
                return done(null, user);
            }
            else{
                return done(null, false, {message: 'Passwords do not match'});
            }
        }
        catch {
            return done(null, false, {message: 'There was a problem logging you in.'})
        }
    }

    passport.use(new LocalStrategy(authenticateUser));
    passport.serializeUser((user, done) => {
        return done(null, user._id);
    });
    passport.deserializeUser((id, done) => {
        return done(null, getUserFromId(id));
    });
}

【问题讨论】:

    标签: javascript node.js express passport.js


    【解决方案1】:

    您应该等待deserializeUser 的承诺:

    passport.deserializeUser(async (id, done) => {
            const user = await getUserFromId(id);
            return done(null, user);
        });
    

    【讨论】:

    • 谢谢!这是我在上面的代码中遇到的两个问题之一。第二个问题是我没有将 User 数据库模型传递给 getUserFromId
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-06
    • 2018-07-26
    • 1970-01-01
    • 2014-04-02
    • 2016-10-20
    • 1970-01-01
    相关资源
    最近更新 更多