Сбой схемы meteor-collection2 Accounts.createUser()

Я пытаюсь использовать метеор-коллекцию2 для проверки моей коллекции.

У меня есть сервис на стороне сервера:

Meteor.methods
  UserSignUpService: (options) ->
    # create user
    Accounts.createUser options

Что я вызываю на стороне клиента:

Meteor.call 'UserSignUpService',
  email: '[email protected]'
  password: 'mypassword'
  profile:
    name: 'me'

А это моя схема:

# user profile
UserProfile = new SimpleSchema
  name:
    type: String
    min: 1
    max: 50
    optional: false

# user
User = new SimpleSchema
  emails:
    type: [Object]
    optional: false
  "emails.$.address":
    type: String
    regEx: SimpleSchema.RegEx.Email
  "emails.$.verified"
    type: Boolean
  createdAt:
    type: Date
  profile:
    type: UserProfile
    optional: false
  services:
    type: Object
    optional: true
    blackbox: true

# links to user collection
Meteor.users.attachSchema User

Но когда пользователь создан, в моей коллекции монго есть не все поля:

{ "_id" : "ikvBq95JBLXMCSnhT", "emails" : [ { "address" : "[email protected]" } ] }

При этом должно быть:

{ "_id" : "WNkjGFhNkLpRR2Jex", "createdAt" : ISODate("2015-08-06T09:00:59.887Z"), "services" : { "password" : { "bcrypt" : "$2a$10$QvMLuI.Pv0bzzii3ZZP...fHfUlU9KiYfcsC2VHBf6q1OSPM6cfTW" }, "resume" : { "loginTokens" : [ { "when" : ISODate("2015-08-06T09:01:00.002Z"), "hashedToken" : "9KyqjRVSWm0nfIlS0sqODRmddlJ5GaG3mJ4+RMItOhk=" } ] } }, "emails" : [ { "address" : "[email protected]", "verified" : false } ], "profile" : { "name" : "me" } }

Есть идеи по этой проблеме?
Большое спасибо!


person Yannis    schedule 06.08.2015    source источник
comment
Как вы нашли своего пользователя в коллекции? Через консоль или через клиент mongo?   -  person SylvainB    schedule 06.08.2015
comment
Через консоль: db.users.find()   -  person Yannis    schedule 06.08.2015
comment
А db.users.find() дает только поля _id и emails?   -  person SylvainB    schedule 06.08.2015
comment
Да, потому что в моем пользовательском объекте есть только эти два поля...   -  person Yannis    schedule 06.08.2015


Ответы (1)


На самом деле вы не устанавливаете значение поля createdAt, попробуйте:

createdAt:
  type: Date
  autoValue: function(){
    if this.isInsert return new Date()
    else if this.isUpsert return { $setOnInsert: new Date };
    else if this.isSet this.unset();
  }

Вы также можете опустить optional: false в своей схеме, так как это значение по умолчанию.

Кроме того, и я подозреваю, что это более серьезная проблема, не все пользовательские ключи возвращаются клиенту по умолчанию, обычно публикуется только профиль. Например, вы ожидаете ключ services, но обычно он не встречается. Посмотрите документ в консоли монго и посмотрите, что там. Возможно, вам потребуется опубликовать более полный набор ключей для клиента.

person Michel Floyd    schedule 06.08.2015