2016-04-13 7 views
0

Ich verwende die ian:accounts-ui-bootstrap-3, um Konten in meiner Meteor App zu erstellen. In dieser Anwendung verwende ich eine leicht angepasste Version, in der der Benutzer seinen Benutzernamen und sein Geschlecht angibt.Wie wird ein Profilfeldwert basierend auf Benutzereingaben in Meteor mit ian: accounts-ui-bootstrap-3 festgelegt?

Accounts.ui.config({ 
    requestPermissions: {}, 
    extraSignupFields: [{ 
     fieldName: 'username', 
     fieldLabel: 'Username', 
     inputType: 'text', 
     visible: true, 
     validate: function(value, errorFunction) { 
      if (!value) { 
       errorFunction("Please write your username"); 
       return false; 
      } else { 
       return true; 
      } 
     } 
    }, { 
     fieldName: 'gender', 
     showFieldLabel: false, // If true, fieldLabel will be shown before radio group 
     fieldLabel: 'Gender', 
     inputType: 'radio', 
     radioLayout: 'vertical', // It can be 'inline' or 'vertical' 
     data: [{ // Array of radio options, all properties are required 
      id: 1, // id suffix of the radio element 
      label: 'Male', // label for the radio element 
      value: 'm' // value of the radio element, this will be saved. 
     }, { 
      id: 2, 
      label: 'Female', 
      value: 'f', 
      checked: 'checked' 
     }], 
     visible: true 
    }, ] 
}); 

Dies funktioniert gut und ich einen Benutzer zu erhalten, deren Daten (etwas gekürzt) sieht wie folgt aus:

{ 
    "username" : "testuser", 
    "emails" : [ 
     { 
      "address" : "[email protected]", 
      "verified" : false 
     } 
    ], 
    "profile" : { 
     "username" : "testuser", 
     "gender" : "f" 
    } 
} 

Jetzt möchte ich die „Gender“ Wert verwenden, um ein neues Feld zu setzen genannten " avatar "entweder" generic-male.png "oder" generic-female.png ". In der Post https://stackoverflow.com/questions/34435674/meteor-accounts-entry-how-to-set-extrasignupfields-to-meteor-user-profile wird vorgeschlagen, die Konten zu verwenden. onCreateUser-Mechanismus. Also schrieb ich dies, und steckte es in die main.js Datei im Server-Katalog:

Accounts.onCreateUser(function(user){ 
    if (user.gender=='m') { 
    user.avatar = "generic-male.png" 
    } else { 
    user.avatar = "generic-female.png" 
    } 
}) 

Aber das erzeugt den folgenden Fehler:

Exception while invoking method 'createUser' Error: insert requires an argument 

Ich nehme an, das liegt daran, dass der Benutzer Parameter nicht ist an die onCreateUser-Methode übergeben. Aber wie soll das gemacht werden?

+0

Rückkehr 'user' in Ihrer' Accounts.onCreateUser' Funktion sollte Ihr Problem lösen. –

Antwort

2

Sie benötigen user in Ihrer accountsServer.onCreateUser(func) Funktion zurückzukehren:

The function should return the user document (either the one passed in or a newly-created object) with whatever modifications are desired. The returned document is inserted directly into the Meteor.users collection.

Zum Beispiel:

Accounts.onCreateUser(function(user){ 
    if (user.gender === 'm') user.avatar = "generic-male.png"; 
    else user.avatar = "generic-female.png"; 
    return user; 
}); 
+0

Danke, das hat es gelöst! – NiklasR

Verwandte Themen