我正在使用MeteorJS构建一个简单的用户帐户。用户只能使用Google登录/注册。如果他们是第一次注册,系统会在用户帐户进行身份验证后,系统会提示用户填写个人资料信息。
我正在使用Collections2管理用户帐户的架构并将其附加到Meteor.users,如下所示:
var Schemas = {};
Schemas.UserProfile = new SimpleSchema({
firstName: {
type: String,
regEx: /^[a-zA-Z-]{2,25}$/,
optional: true
},
lastName: {
type: String,
regEx: /^[a-zA-Z]{2,25}$/,
optional: true
},
gender: {
type: String,
allowedValues: ['Male', 'Female'],
optional: true
}
});
Schemas.User = new SimpleSchema({
username: {
type: String,
regEx: /^[a-z0-9A-Z_]{3,15}$/
},
_id : {
type: String
},
createdAt: {
type: Date
},
profile: {
type: Object
},
services: {
type: Object,
blackbox: true
},
// Add `roles` to your schema if you use the meteor-roles package.
// Option 1: Object type
// If you specify that type as Object, you must also specify the
// `Roles.GLOBAL_GROUP` group whenever you add a user to a role.
// Example:
// Roles.addUsersToRoles(userId, ["admin"], Roles.GLOBAL_GROUP);
// You can't mix and match adding with and without a group since
// you will fail validation in some cases.
//roles: {
// type: Object,
// optional: true,
// blackbox: true
//}
// Option 2: [String] type
// If you are sure you will never need to use role groups, then
// you can specify [String] as the type
roles: {
type: [String],
optional: true
}
});
Meteor.users.attachSchema(Schemas.users);
注册帐户时,我收到错误:
调用方法'login'时出现异常错误:当修饰符时 选项为true,验证对象必须至少有一个运算符
我是Meteor的新手,我不确定这个错误意味着什么。我似乎无法找到有关该问题的任何文件。我已经尝试修改我的Meteor.users.allow和Meteor.users.deny权限,看看是否有任何影响,但它似乎是我使用collections2包的方式的一些潜在问题。
更新 - 已解决: 我的代码最底部的一个拼写错误导致错误:
我在哪里Meteor.users.attachSchema(Schemas.users);
应该是Meteor.users.attachSchema(Schemas.User);
与@Ethaan发布的内容类似,我应该将我的Schemas.User.profile类型引用到profile: {
type: Schemas.UserProfile
}
这样,我的用户配置文件设置将根据UserProfile架构进行验证,而不是仅仅被验证为对象。
答案 0 :(得分:2)
似乎其中一个选项为null或dosnt存在。
createdAt,profile,username,services.
就像错误说的那样,它得到了验证,但是dosnt存在,例如你正在尝试验证配置文件对象,但是没有配置文件对象,所以它没有在模式上获得。
当修饰符选项为true时
这部分是因为默认情况下,所有键都是必需的。设置optional: true
。所以,看看登录/注册工作流程的问题在哪里。将选项更改为false
。
例如,更改配置文件字段中的可选项。
Schemas.User = new SimpleSchema({
username: {
type: String,
regEx: /^[a-z0-9A-Z_]{3,15}$/
},
_id : {
type: String
},
createdAt: {
type: Date
},
profile: {
type: Object,
optional:false, // for example
},
services: {
type: Object,
blackbox: true
}
});