【问题标题】:Has anyone used Mongoose-auth? How do you over-ride findOrCreateUsers?有人用过Mongoose-auth吗?你如何覆盖 findOrCreate 用户?
【发布时间】:2011-08-14 08:33:09
【问题描述】:

现在我正在使用 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 显示 True,耶!)

我知道这是一个新库,但如果您使用过它(或对 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;
  }

【问题讨论】:

    标签: javascript authentication mongodb node.js mongoose


    【解决方案1】:

    无需将这些文件复制到您自己的目录中。只需在您的 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 的链接以重新创建问题,我可以为您提供帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-02-23
      • 2011-01-28
      • 2017-04-25
      • 1970-01-01
      • 2012-01-10
      • 2020-06-09
      • 2020-06-10
      • 2010-09-12
      相关资源
      最近更新 更多