在Node.js和MongoDB中创建注册和登录表单

37

我是新手,想要为用户创建一个注册和登录页面,同时需要适当的用户授权。我希望将用户信息存储在MongoDB数据库中。如何实现这一点?有没有人可以提供相关代码,以便我可以开始使用node.js和mongodb。请帮帮我。

3个回答

42

您可以在Alex Young的Nodepad应用程序中找到您正在尝试完成的完整示例。您应该查看的2个重要文件是这两个:

https://github.com/alexyoung/nodepad/blob/master/models.js
https://github.com/alexyoung/nodepad/blob/master/app.js

模型的一部分如下:

  User = new Schema({
    'email': { type: String, validate: [validatePresenceOf, 'an email is required'], index: { unique: true } },
    'hashed_password': String,
    'salt': String
  });

  User.virtual('id')
    .get(function() {
      return this._id.toHexString();
    });

  User.virtual('password')
    .set(function(password) {
      this._password = password;
      this.salt = this.makeSalt();
      this.hashed_password = this.encryptPassword(password);
    })
    .get(function() { return this._password; });

  User.method('authenticate', function(plainText) {
    return this.encryptPassword(plainText) === this.hashed_password;
  });

  User.method('makeSalt', function() {
    return Math.round((new Date().valueOf() * Math.random())) + '';
  });

  User.method('encryptPassword', function(password) {
    return crypto.createHmac('sha1', this.salt).update(password).digest('hex');
  });

  User.pre('save', function(next) {
    if (!validatePresenceOf(this.password)) {
      next(new Error('Invalid password'));
    } else {
      next();
    }
  });

我认为他也在dailyjs网站上解释代码


Alex的教程正是我所需要的。 - mwilcox
3
这是认证页面的链接:http://dailyjs.com/2010/12/06/node-tutorial-5/。 - Augustin Riedinger

21

这个演示很不错,但是代码的编写方式不太友好:/ - tUrG0n
3
我不同意。除非自 2012 年 6 月 13 日以来他对其进行了更改。我认为这段代码结构良好,我可以立即知道正在发生什么。值得一看。 - Ryan Ore
这对我来说是个很好的样板。我肯定会根据自己的需求进行修改(这也是你应该做的)。我正在考虑将这种方法与护照集成。我也将转换到使用Mongoose来处理MongoDB,只是还没有实现。无论如何,这是一个很好的参考项目。 - BRogers

10

想要轻松入门,可以看看 ExpressJS + MongooseJS + MongooseAuth

特别是最后一个插件提供了一种标准的简单方法来使用多种不同的认证方式(密码、Facebook、Twitter等)进行登录。


有没有一种方法可以将登录详细信息存储在数据库(mongodb)中,然后稍后检索详细信息并检查特定用户是否存在于数据库中,如果是,则允许该用户登录并重定向到另一个页面。否则,他将无法登录。有人能提供参考代码吗? - Dar Hamid
1
@DarHamid Mongoose-auth会自动将用户信息(从密码、Facebook、Twitter等获取)存储到mongodb中。克隆它并运行示例。有关更多信息,请参阅Readme.md。 - k00k
1
值得注意的是,两年后遗憾的是MongooseAuth没有得到很好的维护,建议使用PassportJS代替。 - Petrogad

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接