Node.js中Passport.js的req.user返回Promise如何提取内部字段?
问题原因
问题根源出在Passport的deserializeUser配置逻辑上:你的getUserById是异步方法,返回Promise结构,你没有等待它执行完成就直接将返回的Promise传给了done回调,导致Passport直接把Promise挂载到了req.user属性上,而非Promise resolve后的实际用户对象。
修复方案
修改deserializeUser的代码,添加异步等待逻辑,等getUserById返回实际用户结果后再传递给done回调:
passport.deserializeUser(async (id, done) => { try { const user = await getUserById(id) done(null, user) } catch (error) { done(error) } })
验证效果
修改完成后重启服务,req.user就会直接返回解析完成的用户对象,你可以直接提取所需属性:
// 业务逻辑中可直接调用 const userRole = req.user.role console.log(userRole) // 预期输出 'user'
内容的提问来源于stack exchange,提问作者n33t
相关产品推荐
相关产品推荐

