簡體   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