【发布时间】:2021-10-07 06:42:31
【问题描述】:
我无法从 req.user 获取项目,当我尝试查看 req.user 中的内容时,它显示:
Promise {
{
login: 'login',
password: '$2b$10$sivL/8KvPYzlN/b24nWNOOa7pd02WX',
id: 12,
role: 'user'
}
}
原来我可以输出Promise { {} },但我只需要内部结构,如何获取它进行进一步处理(仅以角色为例)?
req.user 在那里设置(根据指南)
const LocalStrategy = require('passport-local').Strategy
const bcrypt = require('bcrypt')
function initialize(passport, getUserByEmail, getUserById) {
const authenticateUser = async (email, password, done) => {
const user = await getUserByEmail(email)
if (user == null) {
return done(null, false, { message: 'No user with that email' })
}
try {
if (await bcrypt.compare(password, user.password)) {
return done(null, user)
} else {
return done(null, false, { message: 'Password incorrect' })
}
} catch (e) {
return done(e)
}
}
passport.use(new LocalStrategy({ usernameField: 'email' }, authenticateUser))
passport.serializeUser((user, done) => done(null, user.id))
passport.deserializeUser((id, done) => {
return done(null, getUserById(id))
})
}
module.exports = initialize
【问题讨论】:
-
你应该解决promise,而不是尝试直接从中提取数据。
-
可以把设置
req.user的登录功能贴出来吗?您应该在那里解决承诺并使用结果设置req.user -
您不应该查看 Promise 的内部结构——它们的内部结构是故意保密的。如果你想要一个 promise 的解析值,你可以在 promise 上使用
.then()或await并以这种方式获得解析值。如果您显示该对象的来源(首先如何将其分配给req.user),人们可以更具体地为您提供帮助。这可能是代码需要修改的地方。 -
@coagmano 已编辑
-
@n33t 谢谢。原来我的第一个猜测是错误的,所以我编辑了我的答案
标签: javascript node.js passport.js