创建新用户时,我需要创建一些通过其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;
},
答案 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}}