2013-12-13 28 views
1

我試圖使用流星角色包:https://github.com/alanning/meteor-roles 明顯地在用戶模型中創建一個新字段。流星:在createAccount上添加字段

用戶創建沒有問題,但我試圖定義的'角色'字段沒有創建。我可以在其中添加「個人資料」和詳細信息。但由於某種原因,我無法成爲角色領域。這是我的形式:

Template.signup.events({ 
'submit #signup-form' : function(e, t) { 
    e.preventDefault(); 
    var roles = ['admin'], 
     email = t.find('#email').value, 
     password = t.find('#password').value; 

    Accounts.createUser({email: email, password : password, roles: roles}, function(err){ 
     if (err) { 
     alert("User Not Added") 
     } else { 
     console.log("User Added.") 
     } 

    }); 

} 
}); 

最終,我需要發佈給客戶,但對於現在我只想領域在MongoDB中,這是不顯示。

3件事:

  1. 我覺得上面的代碼應該工作,但顯然我失去了一些東西
  2. 在包文檔就提到了這一點Roles.addUsersToRoles我 嘗試,但沒有運氣
  3. 或者創建後是否需要更新記錄?

我確實進入了數據庫,並手動添加了字段和關聯的字符串以更新它(使用$ set)並且它工作正常。但是從形式本身來看,沒有運氣。

任何指針將不勝感激。謝謝。

回答

4

Accounts.createUser功能只允許您通過profile選項,這是他們最後添加任意用戶屬性存放在mongo中。這就是流星忽略Accounts.createUser呼叫的roles: roles部分的原因。

確實,meteor-roles包存儲的是直接在用戶集合中分配給用戶的角色列表,但這幾乎只是一個實現細節,您可能最好堅持使用meteor-roles爲添加用戶提供的API一個角色:

Roles.addUsersToRoles(<userId>,[<list of roles>])

userId傳遞給Roles.addUsersToRolesAccounts.createUser返回的值時,它要進行這樣的,感覺這樣更安全這可能是在服務器上調用。

+0

很好說。謝謝。對於任何關注此事的人,請勿將userId用作Roles.addUserToRoles上的變量名。 go-oleg不是在說,我只是做了,因爲它有道理。然而,這是保留在某個地方,即使我已經設置了正確的一切,直到我改變了名稱,它不能正常工作, – Colton45

+0

@ go-oleg是點亮的。 github repo中的示例應用程序顯示了這一行爲:https://github.com/alanning/meteor-roles/blob/master/examples/mini-pages/server/server.js#L57-L66 – alanning

1

Accounts.createUser功能只usernameemailpasswordprofile作爲PARAMS用戶對象。 See the documentation here.所以,另一個字段添加到一個新的用戶對象,您需要將其添加在第二個步驟:

var uid = Accounts.createUser({email: email, password: password}); 
Meteor.users.update(uid, {$set: {roles: roles}}); 
+0

Hubert OG你是一個成年人。我到處看到你的答案,謝謝。如果他們願意,我會使用這個信息來允許用戶添加他們的個人資料。 – Colton45