繁体   English   中英

passport.js req.user 正在返回:'Promise { false }' - 如何获取当前会话的用户名?

[英]passport.js req.user is returning: 'Promise { false }' - How do I get the current sessions' username?

在 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 不应该返回一个promise,对吧? 有什么建议?

更多信息:这是我的护照序列化/反序列化和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));
    });
}

您应该在deserializeUser等待承诺:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM