我們有兩種類型的用戶,管理員和普通用戶。何時調用serialize和deserialize護照方法?它究竟設置了什麼?
passport.serializeUser(function(user, done) {
console.log('Sear');
done(null, user.id);
});
passport.deserializeUser(function(id, done) {
console.log(id);
console.log("Deser");
User.findById(id, function(err, user) {
if(err) done(err);
if(user){
done(null, user);
}else{
vendorUser.findById(id, function(err, user){
if(err) done(err);
done(null,user);
});
}
});
});
CONSOLE.LOG獲取與文本
DESER
什麼是兩者的功能究竟做頻繁輸出(即使在一個單一的API請求)?一個詳細的答案表示讚賞。 TIA。
哪裏'user.id'來自文章?在我看到的大多數貓鼬模型中,對於用戶來說,有諸如'_id','name','password'等字段。字母'id'是任意的。我可以使用'done(null,user.cat);'? – 2016-01-22 04:53:04
在MongoDB中,存儲在集合中的文檔需要一個唯一的_id字段作爲主鍵。如果未指定_id字段,則MongoDB使用ObjectIds作爲_id字段的默認值;即如果文檔不包含頂級_id字段,則MongoDB驅動程序添加包含ObjectId的_id字段。我建議你閱讀[this](https://docs.mongodb.org/manual/reference/object-id/)。序列化/反序列化基本上與對象本身有關,而不是單個值,所以儘量不要做** user.cat **,序列化**用戶**是對的。 – NarendraSoni 2016-01-22 09:14:50
感謝您的回覆我知道您寫了關於'_id'我只是覺得它在護照的文檔中很奇怪,在教程中他們大多使用'user.id',文檔中沒有'id'字段。你明白爲什麼我覺得這很奇怪嗎?也暗示着,而不是使用'user.id'我可以使用'done(null,** user **);'只是用戶?或者如果有一個名字字段,可能是'user.name'。 – 2016-01-22 09:29:04