3
我在我的應用程序上實現了付款功能,我的提供商需要AccountId
(我的系統中的用戶標識)和Email
。我注意到了一些我無法用Passport.js解釋的奇怪行爲。首先,反序列化看起來像文檔: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
的方法,但對我來說這似乎是一種破綻。
非常感謝,這的確是我的意思是使用它的方式! –
儘管如此,我還是沒有看到'User.findById()'的情況,它應該是異步的。這是否意味着Node等待它解決並在下一個循環中處理代碼? –
@AntonEgorov你是對的,'User.findById()'是異步的。在中間件調用'done'函數之前,Express並沒有開始運行你的路由處理代碼,你在_after_ User.findById()'返回的回調函數中。 –