【问题标题】:Create New User with Passport-Local using MongoDB and Node.JS使用 MongoDB 和 Node.JS 使用 Passport-Local 创建新用户
【发布时间】:2015-01-08 09:53:14
【问题描述】:

这是新用户的代码:

var User = mongoose.model('User', userSchema);
var usr = new User({ username: 'bob', email: 'bob@example.com', password: 'secret' });

这是检查登录的代码。

passport.use(new LocalStrategy(function(username, password, done) {
  User.findOne({ username: username }, function(err, user) {
    if (err) { return done(err); }
    if (!user) { return done(null, false, { message: 'Unknown user ' + username }); }
    user.comparePassword(password, function(err, isMatch) {
      if (err) return done(err);
      if(isMatch) {
        return done(null, user);
      } else {
        return done(null, false, { message: 'Invalid password' });
      }
    });
  });
}));

如果username 不存在,则显示"Unknown user __________"

我不想说unknown user,而是想在数据库中创建一个新用户。如何修改此代码来做到这一点?

如果该登录名尚不存在,我想使用他们输入的登录信息创建一个新用户。

更新

我正在尝试这个,但它不起作用。 bob5 没有保存到数据库中。

passport.use(new LocalStrategy(function(username, password, done) {
  User.findOne({ username: username }, function(err, user) {
    if (err) { return done(err); }
 if (!user) { usr = new User({ username: 'bob5', email: 'bob5@example.com', password: 'secret' });
usr.save(function(err) {
  if(err) {
    console.log(err);
  } else {
    console.log('user: ' + usr.username + " saved.");
  }
});

如果我输入这个,bob99 就会保存到数据库中。所以我可以创建一个用户......我只需要在 if 语句中将参数传递给它(我认为)。

usr = new User({ username: 'bob99', email: 'bob99@example.com', password: 'secret' });
usr.save(function(err) {
  if(err) {
    console.log(err);
  } else {
    console.log('user: ' + usr.username + " saved.");
  }
});

【问题讨论】:

  • 所以?而不是return done(...) 插入。
  • 我不知道如何执行“新用户”命令,它说返回完成。你能告诉我正确的语法吗?我会给你一个赞成票:)
  • 我不也需要把 User 作为参数传入吗?

标签: node.js mongodb passport.js


【解决方案1】:
passport.use(new LocalStrategy(function(username, password, done) {

  User.findOne({ username: username }, function(err, user) {

    if (err) { return done(err); }

    if (!user) { 
         usr = new User({ username: 'bob99', email: 'bob99@example.com', password: 'secret' });
         usr.save(function(err) {
         if(err) {
               console.log(err);
         } else {
               console.log('user: ' + usr.username + " saved.");
         }
      });

    }

    user.comparePassword(password, function(err, isMatch) {
      if (err) return done(err);
      if(isMatch) {
        return done(null, user);
      } else {
        return done(null, false, { message: 'Invalid password' });
      }
    });
  });
}));

【讨论】:

  • 谢谢,瓦尔丹!您能否包含创建用户的代码?我不确定如何传递参数/参数。
  • 在您尝试保存 bob5 的上述更新代码中,括号未正确关闭。检查它们。
猜你喜欢
  • 2013-08-04
  • 2023-03-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-27
  • 1970-01-01
  • 2019-07-23
  • 1970-01-01
相关资源
最近更新 更多