【问题标题】:req.user gets changed to Array objectreq.user 更改为 Array 对象
【发布时间】:2013-12-21 08:42:25
【问题描述】:

我在运行npm install 后遇到了一个奇怪的问题。

req.user 在 `requireManager()(或任何控制器)中访问时的实例是 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);
    }

请帮我解决这个问题。

问候, 萨钦

【问题讨论】:

  • 你能发布你的 (de)serializeUser 实现吗?
  • 编辑帖子并包含反序列化用户
  • 我对 CompoundJS 不太熟悉,但它会覆盖 req.user 本身吗?您的 deserializeUser 看起来不错。

标签: node.js express passport.js compoundjs


【解决方案1】:

以防有人通过 Google 搜索(比如我)来到这里。

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

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

【讨论】:

  • 谢谢,我最终自己做了这个,但决定寻找一个更“合法”的答案。不知道 findById 返回了一个数组,但这解释了它的奇怪行为。
猜你喜欢
  • 1970-01-01
  • 2022-08-23
  • 1970-01-01
  • 2019-08-14
  • 1970-01-01
  • 2013-12-29
  • 2017-01-04
  • 2014-11-23
  • 1970-01-01
相关资源
最近更新 更多