我是Meteor的新手,我对Collection2和Accounts有一点疑问。
目前,用户可以创建帐户。这由调用Meteor方法的Template事件(客户端)处理。此方法在客户端和服务器端定义。
客户端,我做了一些UI的东西(没什么重要的),而服务器端我正在创建帐户。
这是我的服务器端Meteor方法:
Meteor.methods({
'registerUser': function (user) {
Accounts.createUser(user);
}
});
我还使用Collection2包在插入或更新文档之前检查数据:
Schema = {};
Schema.UserProfile = new SimpleSchema({
name: {
type: String,
optional: false,
label: "Name"
}
});
Schema.User = new SimpleSchema({
username: {
type: String,
optional: true,
label: "Username"
},
emails: {
type: Array,
optional: true
},
"emails.$": {
type: Object
},
"emails.$.address": {
type: String,
regEx: SimpleSchema.RegEx.Email,
label: "Email address"
},
"emails.$.verified": {
type: Boolean
},
createdAt: {
type: Date
},
profile: {
type: Schema.UserProfile,
optional: true
},
services: {
type: Object,
optional: true,
blackbox: true
}
});
Meteor.users.attachSchema(Schema.User);
好的,我在这里。我的问题是在创建用户(服务器端)时获取Collection2返回的潜在错误。像这样:
Meteor.methods({
'registerUser': function (user) {
Accounts.createUser(user, (err, res) => {
if(err) return err;
});
return true;
}
});
但Meteor不支持Accounts.createUser()的回调。因此,即使我使用Collection2,我的用户也可以提交错误的输入。
问题是:在这种情况下是否可以将Collection2与Accounts一起使用以及如何使用?
谢谢你的一切! :)
答案 0 :(得分:0)
当您调用Accounts.createUser时,您不会将其传递给具有Meteor.users集合中的模式的对象。您传递具有指定字段的选项对象:
选项强>
用户名字符串
此用户的唯一名称。电子邮件字符串
用户的电子邮件地址。密码字符串
用户的密码。这不是通过电汇以纯文本发送的。个人资料对象
用户的个人资料,通常包括姓名字段。
从客户端调用此方法确实有回调:
回调功能
仅限客户端,可选回调。在成功时没有参数调用,或者在失败时使用单个Error参数调用。
不要为User对象创建Schema。
您可以使用Schema.UserProfile来验证在profile参数中传递的内容,并且最好的位置是在服务器上的accountsServer.validateNewUser回调内。
Accounts.validateNewUser(function (user) {
if(Match.test(user.profile, Schema.UserProfile))
return true;
throw new Meteor.Error(403, "Invalid UserProfile");
});