2015-05-04 69 views
1

当用户从使用useraccounts:core包生成的表单中注册(第一个用户)时,我们如何自动创建第二个用户?在Meteor.JS创建第一个用户时创建第二个用户

运行从Accounts.onCreateUSer内的Accounts.createUser导致错误Exception while invoking method 'ATCreateUserServer' TypeError: Cannot read property '_id' of undefined

Accounts.onCreateUser(function(options, user) { 

    // Create Primary User 
    if(!user.type) { 

     // Set user.type as 'user' 
     user.type = 'user' 

     // Create Secondary User 
     Accounts.createUser({ 
      username: options.profile.slaveName, 
      password: options.profile.slaveName, 
      type: 'slave', 
      profile: { 
       firstName: user.profile.firstName, 
       lastName: user.profile.lastName 
      } 
     }) 

     user.profile = options.profile 
     return user 
    } 


    // Create Secondary User 
    if(user.type == 'slave') { 
     user.profile = options.profile 
     return user 
    } 

}); 

回答

3

它看起来对我像你混为一谈的user论点和论据options。例如,type字段通过options参数进来,而不是user

下面的代码为我工作:

Accounts.onCreateUser(function(options, user) { 
    // Create Primary User 
    if(!options.type) { 
    // Set user.type as 'user' 
    options.type = 'user' 

    // Create Secondary User 
    Accounts.createUser({ 
     username: options.profile.slaveName, 
     password: options.profile.slaveName, 
     type: 'slave', 
     profile: { 
      firstName: options.profile.firstName, 
      lastName: options.profile.lastName 
     } 
    }); 

    user.profile = options.profile 
    return user 
    } 


    // Create Secondary User 
    if(options.type == 'slave') { 
    user.profile = options.profile 
    return user 
    } 
}); 

我然后进行测试,像这样:

// console 
Accounts.createUser({username: "guest", password: "guest", profile: {slaveName: 'guestslave', firstName: "Greatest", lastName: "Ever"}}) 
Meteor.users.find({username: {$regex: 'guest'}}).fetch() 
> [returned two user objects]