Uygulamamda bir ödeme özelliği uyguluyorum ve sağlayıcım AccountId
(kullanıcının sistemimde tanımlanması) ve Email
. Passport.js ile açıklayamadığım bazı tuhaf davranışlar fark ettim. Her şeyden önce, seri kaldırma docs gibi görünür:Passport.js async vs sync deserialization
passport.deserializeUser(function(id, done) {
User.findById(id, function(err, user) {
done(err, user);
});
});
Şimdi, istek için veri oluştururlar zaman ancak, bu bir zaman uyumsuz operasyon olduğunu olsun, istiyorum: Bazıları için
var data = {
AccountId: toString(req.user._id),
Email: req.user.auth.local.email
// ...
}
Nedeni Email
doğru şekilde ayarlanmış, ancak AccountId
her zaman [object Undefined]
değerini döndürür. Eh, belki de Pasport'un serileştirme sürecinin asenkron doğasından kaynaklandığını düşündüm (User.findById()
'a zaman gerektiriyor), ama neden Email
doğru ayarlandı?
AccountId
ayarının req.session.passport.user
ayarını buldum, ancak bana bir kesmek gibi görünüyor.
Çok teşekkürler, gerçekten de onu kullanmak içindir yoldur! –
Yine de durumu 'User.findById() 'ile almıyorum, async olması gerekir. Node'un çözülmesini beklediği ve kodu bir sonraki döngüde işlediği anlamına mı geliyor? –
@AntonEgorov Haklısınız, 'User.findById() 'async. Express, middleware 'done' işlevini çağırdıktan sonra, _after_ 'User.findById()' işlevini geri döndükten sonraya kadar rota işleme kodunu çalıştırmaya başlamıyor. –