passport.js req.user 正在返回:'Promise false ' - 如何获取当前会话的用户名?
Posted
技术标签:
【中文标题】passport.js req.user 正在返回:\'Promise false \' - 如何获取当前会话的用户名?【英文标题】: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));
);
【问题讨论】:
【参考方案1】:您应该等待deserializeUser
的承诺:
passport.deserializeUser(async (id, done) =>
const user = await getUserFromId(id);
return done(null, user);
);
【讨论】:
谢谢!这是我在上面的代码中遇到的两个问题之一。第二个问题是我没有将 User 数据库模型传递给 getUserFromId以上是关于passport.js req.user 正在返回:'Promise false ' - 如何获取当前会话的用户名?的主要内容,如果未能解决你的问题,请参考以下文章
req.user 使用 passport.js 1-2 分钟后清除
Passport.js、会话和反应 |从 /login 路由以外的任何路由访问 req.user 是未定义的
Express + Passport.js:req.user 未定义
无法使用 Passport.js 和 Express 4 访问 req.user