2013-12-21 72 views
0

我在運行npm install後遇到了一個奇怪的問題。req.user被更改爲Array對象

當在requireManager()(或任何控制器)中訪問時,req.user的實例是Array類型,而不是從passport.deserializeUser返回的對象。

passport.deserializeUser(function(id, done) { 
    compound.models.User.findById(id, function(err, user) { 
     done(err, user); 
    }); 
}); 

的console.log(req.user.constructor)在控制打印

function Array() { [native code] } 

console.log(user.constructor) in `passport.deserializeUser` prints: 


function model(doc, fields, skipId) { 
     if (!(this instanceof model)) 
      return new model(doc, fields, skipId); 
     Model.call(this, doc, fields, skipId); 
    } 

請幫我解決這個問題。

問候, 薩欽

+0

你可以發佈你的(de)serializeUser實現嗎? – robertklep

+0

編輯帖子,包括反序列化用戶 – Sachin

+0

我不太熟悉CompoundJS,但它可以覆蓋'req.user'本身嗎?你的'deserializeUser'看起來沒問題。 – robertklep

回答

1

萬一有人從谷歌搜索結束了在這裏(像我一樣)。

passport.deserializeUser,在一個模型中使用findById返回一個數組,要麼使用findOne或傳遞到user[0]done

passport.deserializeUser(function (id, done) { 
    myModel.findOne(id, function (err, user) { 
     done(err, user); 
    }); 
}); 
+0

謝謝,我最終自己做了這件事,但決定尋找一個更合理的答案。不知道findById返回了一個數組,但是這解釋了它的怪異行爲。 – hellojebus