我正在我的应用程序上实现支付功能,我的提供商需要 AccountId
(我系统中的用户标识)和 Email
。我注意到一些我无法用 Passport.js 解释的奇怪行为。首先,反序列化在文档中看起来像:
passport.deserializeUser(function(id, done) {
User.findById(id, function(err, user) {
done(err, user);
});
});
现在,我知道这是一个异步操作,但是当我为请求形成数据时,我会:
var data = {
AccountId: toString(req.user._id),
Email: req.user.auth.local.email
// ...
}
出于某种原因,Email
设置正确,但 AccountId
始终返回 [object Undefined]
。好吧,我认为这可能是由于 Passport 反序列化的异步性质(因为它需要时间来 User.findById()
),但为什么 Email
设置正确呢?
我找到了一种将 AccountId
设置为 req.session.passport.user
的方法,但对我来说这似乎是一种 hack。
最佳答案
你的问题在这里:
AccountId: toString(req.user._id),
toString 是一个对象的方法。在浏览器中,简单地调用 toString 假设您指的是 window.toString()
并且它返回 [object Window]
。在 Node 中,由于全局窗口不存在,您得到 [object Undefined]
。
我认为您调用该函数的方式应该是这样的:
AccountId: req.user._id.toString(),
关于node.js - Passport.js 异步与同步反序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36383404/