req.user变为Array对象

时间:2013-12-21 08:42:25

标签: node.js express passport.js compoundjs

我跑npm install后面临一个奇怪的问题。

在`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);
    }

请帮我解决这个问题。

此致 萨钦

1 个答案:

答案 0 :(得分:1)

万一有人从谷歌搜索结束(像我这样)。

passport.deserializeUser中,在模型上使用findById返回一个数组,使用findOne或将user[0]传递给done

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