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()
允许我获取当前会话是否已通过身份验证。我还希望服务器 return 当前会话的用户名。为此,我尝试访问 req.
的用户 属性
if(req.isAuthenticated()){
let user = req.user.username;
}
但它正在 returning 'undefined'。我继续...
if(req.isAuthenticated()){
console.log(req.user);
}
它说 req.user 是 'Promise{ false }',出于某种原因。我,然后试了一下
if(req.isAuthenticated()){
let user = await req.user;
console.log(user);
}
它 returns 'false'。这是我第一次使用 passport.js,所以我可能设置错了,因为 req.user 不应该 return 一个承诺,对吧?有什么建议吗?
了解更多信息:这是我的护照 serialization/deserialization 和 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);
});
在Node.js中,我使用passportJS LocalStrategy 来验证用户。而这个功能
req.getAuthenticated()
允许我获取当前会话是否已通过身份验证。我还希望服务器 return 当前会话的用户名。为此,我尝试访问 req.
的用户 属性if(req.isAuthenticated()){
let user = req.user.username;
}
但它正在 returning 'undefined'。我继续...
if(req.isAuthenticated()){
console.log(req.user);
}
它说 req.user 是 'Promise{ false }',出于某种原因。我,然后试了一下
if(req.isAuthenticated()){
let user = await req.user;
console.log(user);
}
它 returns 'false'。这是我第一次使用 passport.js,所以我可能设置错了,因为 req.user 不应该 return 一个承诺,对吧?有什么建议吗?
了解更多信息:这是我的护照 serialization/deserialization 和 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);
});