Схема Meteor Collections не разрешает аутентификацию Google

Я создаю простую учетную запись пользователя, используя 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, а не просто проверяться как объект.


person Joe    schedule 01.04.2015    source источник


Ответы (1)


Кажется, что один из этих параметров равен нулю или не существует.

createdAt,profile,username,services.

Подобно тому, как ошибка говорит о том, что что-то проверяется, но не существует, например, вы пытаетесь проверить объект профиля, но объекта профиля нет, поэтому ничего не попадает в схему.

Когда опция модификатора имеет значение 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
    }
});
person Ethaan    schedule 01.04.2015