我在我的应用上实施了付款功能,我的提供商要求AccountId
(我系统中用户的身份)和Email
。我注意到一些我无法用Passport.js解释的奇怪行为。首先,反序列化看起来像在docs中:
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
的方法,但这对我来说似乎是个黑客攻击。
答案 0 :(得分:2)
你的问题在这里:
AccountId: toString(req.user._id),
toString是一个对象的方法。在浏览器中,只需调用toString即表示您的意思是window.toString()
并返回[object Window]
。在Node中,由于全局窗口不存在,因此您获得[object Undefined]
。
我认为你打算调用该函数的方式是这样的:
AccountId: req.user._id.toString(),