[英]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.