Meteor Collections架构不允许进行Google身份验证

时间:2015-04-01 17:40:05

标签: meteor meteor-collection2

我正在使用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架构进行验证,而不是仅仅被验证为对象。

1 个答案:

答案 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
    }
});