流星密码验证

时间:2016-05-22 23:10:59

标签: meteor meteor-accounts

我正在努力弄清楚如何使用我的用户Schema进行密码验证,这就是我到目前为止的做法:

这是架构:

Schema = {};
Schema.UserProfile = new SimpleSchema({
  //LOTS OF FIELDS WORKING FINE
});

Schema.User = new SimpleSchema({
    username: {
        type: String,
        optional: true
    },
    emails: {
        type: Array,
    },
    "emails.$": {
        type: Object
    },
    "emails.$.address": {
        type: String,
        regEx: SimpleSchema.RegEx.Email
    },
    "emails.$.verified": {
        type: Boolean
    },
    createdAt: {
        type: Date
    },
    profile: {
        type: Schema.UserProfile,
        label: "Perfil",
        optional: false
    },
    services: {
        type: Object,
        blackbox: true
    },
    "services.$": {
        type: Object,
        blackbox: true
    },
    "services.$.password": {   // IS IT RIGHT?
      type: String,
      label: "Senha",
      min: 8
    },
    roles: {
        type: String,
        optional: true
    }
});

Meteor.users.attachSchema(Schema.User);

这就是我拯救的方式:

let company = {};
company = {
  email: $('#email').val(),
  password: $('#password').val(),
  roles: 'company',
  profile: companyProfile
}

Meteor.call('saveUser', company, function(error, result) {
  if ( error ) {
    console.log(error);    
  }
}

 Meteor.methods({
  saveUser: function(data) {
    return Accounts.createUser(data);
  }
});

我还是初学者,所以我可能会在这里弄乱一些东西。当我尝试创建用户时,如果任何字段存在问题,则验证会按预期引发错误。但是,如果我错过了密码,没有任何错误,我在这里做错了什么想法?

-------------------------------更新--------------- -------------------

感谢@aedm的回答。我真的希望我能用这样的东西来验证密码和密码确认:

password: {
    type: String,
    label: "Senha",
      min: 8
  },
  password_confirmation: {
    type: String,
    label: "Confirmação de Senha",
    min: 8,
    custom: function () {
      if (this.value !== this.field('password').value) {
        return "passwordMismatch";
      }
    }
  },

我想那时候不可能,是吗?

1 个答案:

答案 0 :(得分:0)

Meteor只存储密码的bcrypt哈希,它总是长于8个字符。

相反,当不符合密码标准时,您的saveUser方法应该抛出错误。

Meteor.methods({
  saveUser: function(data) {
    if (data.password.length < 8) throw new Meteor.Error("Password too short");
    return Accounts.createUser(data);
  }
});

我会尽量避免为用户定义架构,Meteor在没有用户的情况下处理得很好,如何正确地处理它并不是一件容易的事。