有人用过Mongoose-auth吗?你如何覆盖findOrCreate用户?

时间:2011-04-28 02:44:44

标签: javascript authentication mongodb node.js mongoose

现在我正在使用mongoose-auth的Facebook Connect。一切正常,用户通过我的mongodb服务器创建/登录。

但是,我想覆盖findOrCreateUsers,因为我想在注册时为每个新用户分配一个随机的“代码”,并将其放在他们的db.users配置文件中。

所以我查看mongoose-auth/lib/facebook,然后将这3个facebook模块文件复制到我自己的目录[everyauth.js,index.js,schema.js]中。要运行一个简单的测试,我基本上从我的目录中包含了我自己的everyauth.js,并使用了findOrCreateUsers方法而不是默认方法。

它有效,但有一个错误。登录/创建用户后,req.user未定义。 (req.loggedIn显示为真,是的!)

我知道这是一个新的库,但是如果你已经使用它(或者对Node.js了解很多),如果你能帮助我,我真的很感激。我在irc.freenode.net上的#node.js上。昵称是“ xeodox ”。如果你能帮助我,我真的很感激!!

我通过对app.js中的facebook模块执行此操作来覆盖findOrCreateUser:

 findOrCreateUser: function (sess, accessTok, accessTokExtra, fbUser) {
    var promise = new Promise()
      , self = this;
    // TODO Check user in session or request helper first
    //      e.g., req.user or sess.auth.userId
    this.User()().findOne({'fb.id': fbUser.id}, function (err, foundUser) {
      if (foundUser)
        return promise.fulfill(foundUser);
      self.User()().createWithFB(fbUser, accessTok, accessTokExtra.expires, function (err, createdUser) {
        return promise.fulfill(createdUser);
      });
    });
    return promise;
  }

1 个答案:

答案 0 :(得分:3)

无需将这些文件复制到您自己的目录中。只需在mongoose-auth配置中执行以下操作:

facebook: {
  everyauth: {
      myHostname: 'http://localhost:3000'
    , appId: 'YOUR APP ID HERE'
    , appSecret: 'YOUR APP SECRET HERE'
    , redirectPath: '/home'
    , findOrCreateUser: function (session, accessToken, fbUserMetadata) {
      }
  }
}

有关未定义req.user的帮助,请在github上提交issue,其中包含指向自包含gist的链接以重新创建问题,我可以帮助您解决问题。