来自onCreateUser的userId将在关联记录中删除

时间:2015-03-20 16:06:58

标签: meteor

创建新用户时,我需要创建一些通过其ID引用用户的新文档

Accounts.onCreateUser(function(options, user) {
  console.log(user);

  var google = user.services.google;
  var tokens = {
    accessToken: google.accessToken,
    // refreshToken: google.refreshToken
  };

  if (tokens.accessToken) {
    Meteor.call('createChannel', user._id, tokens, function(error, result) {
      if (error) {
        throw error;
      }
    });
  }
  return user;
});

createChannel方法中,我使用传入的标识user._id来设置一些引用用户文档的文档。

createChannel: function(userId, tokens) {
    console.log(userId);

    var missionId = Meteor.call('createDefaultMission', userId);
    ... 

  /* Creates a new mission with default values
   */
  createDefaultMission: function(userId) {
    doc = {
      _id: Random.id(),
      userId: userId,
      name: 'My Mission',
    };

    var missionId = Missions.insert(doc);
    return missionId;
  },

问题是,在这种情况下,Mission记录在创建后没有任何userId字段。使用SimpleSchema时,出现User is required错误。

知道为什么会这样吗?

更新

createDefaultMission: function(userId) {
    doc = {
      _id: Random.id(),
      userId: userId,
      name: 'My Mission',
    };

    console.log(doc); <----- this logs the above with the userId field filled
    console.log(Meteor.users.findOne(userId)); <----- this finds the user with the above ID

    var missionId = Missions.insert(doc); <---- this failed, userId field is not present
    return missionId;
  },

1 个答案:

答案 0 :(得分:1)

userId生成onCreateUser直到Meteor.users.after.insert(function(userId, doc) { var google = doc.services.google; var tokens = {accessToken: google.accessToken}; Meteor.call('createChannel', userId, tokens); }); 完成执行后才生成。有关详细信息,请参阅this issue。你可以使用collection hook来解决这个问题,如下所示:

{{1}}