2015-10-02 51 views
0

上午使用meteor-useraccounts和alanning:我的Meteor webapp中的角色。這個想法是,用戶可以註冊並自動分配角色。所以我正在考慮使用Accounts.onCreateUser掛鉤,但無法讓它工作。Meteor-Useraccounts and Accounts.onCreateUser

Accounts.onCreateUser(function(options, user) { 
    var user = user.user; 
    var defaultRole = ['admin']; 
      if (!user.roles){ 
       Roles.addUsersToRoles(user, defaultRole); 
      } 
}); 

我收到以下錯誤信息:

異常而調用方法「ATCreateUserServer」類型錯誤:無法未定義

讀取屬性「角色」用戶似乎是未知,因此未定義。您可以使用Meteor-useraccounts並在創建用戶時分配角色。

新的編輯:嘗試了一下更進一步,下面的代碼工作,但我真的不主張使用這個,因爲它奇怪的是每次根據用戶的登錄名添加的作用:

Accounts.onLogin(function(user) { 
    check(user, Object); 
     var user = user.user; 
     var defaultRole = ['admin']; 
     if (!user.roles){ 
      Roles.addUsersToRoles(user, defaultRole); 
     } 
    return user; 
}); 

回答

0

總是有很多方法可以做到這一點。在其中的是在創建後的用戶,並正式獲得用戶ID,像這樣添加的角色:

var id = Accounts.createUser(
      createOptions 
     ); 
Roles.addUsersToRoles(id, ["user","guest"]); 

如果你想使用鉤子添加角色onCreateUser可以擴展用戶對象,像這樣:

Accounts.onCreateUser(function(options, user) 
{ 
    if(!options || !user) { 
     throw new Meteor.Error('Problem to create new user'); 
     return; 
    }  
    var user_extend = 
    { 
     username: options.username, 
     email: options.email, 
     profile: options.profile, 
     roles: ["user","guest"] 
    }; 
    _.extend(user,user_extend); 

    return user 
} 

我更喜歡第一種方法,因爲您可以決定何時何地將角色指定給該用戶,因爲您將爲在您的網站上註冊的每個用戶設置這些角色。我希望它有幫助。