我正在努力弄清楚如何使用我的用户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";
}
}
},
我想那时候不可能,是吗?
答案 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在没有用户的情况下处理得很好,如何正确地处理它并不是一件容易的事。