1

在这个Passportjs.org页面上,文档给出了使用 LocalStrategy 的示例,在 LocalStrategy 中,它调用了一个函数:

User.findOne({ username: username }, function (err, user) {
  if (err) { return done(err); }
  if (!user) {
    return done(null, false, { message: 'Incorrect username.' });
  }
  if (!user.validPassword(password)) {
    return done(null, false, { message: 'Incorrect password.' });
  }
  return done(null, user);
});

现在,我看到这个“ User”对象出现在多个地方,例如在passport-windowsauth策略的文档中,示例中使用了以下函数:

User.findOrCreate()

所以现在我想知道我是不是疯了。

这个“用户”对象及其函数是一些现有的框架或函数集,还是这些只是您自己开发的用于查找用户的函数的示例?

4

1 回答 1

2

User 是一个包含用户信息的对象,findOne 或 findById 或 findByusername 只是与此对象关联的原型函数。

他们为他们给出的所有示例假设了一个用户模式(猫鼬用户模式)。它附带了所有提到的原型功能

从他们的工作示例(没有猫鼬模式):
https ://github.com/jaredhanson/passport-local/tree/master/examples/express3

在链接过期的情况下添加代码:

var users = [
    { id: 1, username: 'bob', password: 'secret', email: 'bob@example.com' }
  , { id: 2, username: 'joe', password: 'birthday', email: 'joe@example.com' }
];

    function findById(id, fn) {
      var idx = id - 1;
      if (users[idx]) {
        fn(null, users[idx]);
      } else {
        fn(new Error('User ' + id + ' does not exist'));
      }
    }

    function findByUsername(username, fn) {
      for (var i = 0, len = users.length; i < len; i++) {
        var user = users[i];
        if (user.username === username) {
          return fn(null, user);
        }
      }
      return fn(null, null);
    }
    passport.use(new LocalStrategy(
      function(username, password, done) {
        process.nextTick(function () {
          findByUsername(username, function(err, user) {
            if (err) { return done(err); }
            if (!user) { return done(null, false, { message: 'Unknown user ' + username }); }
            if (user.password != password) { return done(null, false, { message: 'Invalid password' }); }
            return done(null, user);
          })
        });
      }
    ));

参考:
https ://github.com/jaredhanson/passport-local/tree/master/examples/express3

于 2013-10-15T07:19:45.947 回答