You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 09:42:03