2016-04-02 11 views
0

Ich arbeite derzeit an einem Projekt für einen Kunden. Ich versuche, Benutzern Rollen zuzuweisen, wenn sie sich für ein Konto anmelden.Rollen mit Meteor und Reagieren

handleSubmit(e){ 
    e.preventDefault(); 
    this.setState({message:'',messageClass:'hidden'}); 
    var that = this; 
    var first_name = ReactDOM.findDOMNode(this.refs.first_name).value.trim(); 
    var last_name = ReactDOM.findDOMNode(this.refs.last_name).value.trim(); 
    var email = ReactDOM.findDOMNode(this.refs.email).value.trim(); 
    var password = ReactDOM.findDOMNode(this.refs.password).value.trim(); 
    var type = 'fan'; 
    var user = {email:email,password:password,profile:{fullname:(first_name + last_name).toLowerCase(),firsname:first_name,lastname:last_name,avatar:'http://placehold.it/150x150',friends:[],type:type}}; 
    Accounts.createUser(user,function(e){ 
     if (e) { 
      Materialize.toast(e.reason, 5000); 
     } else { 
      FlowRouter.go('/dashboard'); 
     } 
    }) 
} 

Oben ist mein handle submit-Ereignis für das Anmeldeformular. Unten ist der Hook, den ich hinzugefügt habe, um die Rolle dem Benutzer zuzuweisen, nachdem der Benutzer eingefügt wurde.

Meteor.users.after.insert(function (userId, doc) { 
if (doc.profile.type === "fan") { 
    Roles.addUsersToRoles(doc._id, [ROLES.Fan]) 
} 

});

Was ich finde, ist, dass der Benutzer erstellt wird, aber statt auf das Dashboard umgeleitet wird, bleibt der Benutzer auf der Anmeldeseite und erhält einen Fehler in der Toaster-Meldung mit internen Serverfehler. Wenn ich in die Konsole gehe, um den Benutzer zu finden, der erstellt wurde, wird der Profiltyp zugewiesen, aber dem Benutzer fehlt seine E-Mail-Adresse.

Dies ist der Fehler ich in meinem Terminal-Fenster bekommen:

Exception while invoking method 'createUser' ReferenceError: ROLES is not defined I20160402-16:04:42.482(-4)? at Object. (both/collection_hooks/hooks.jsx:3:35) I20160402-16:04:42.482(-4)?
at packages/matb33_collection-hooks/insert.js:35:1 I20160402-16:04:42.482(-4)? at Array.forEach (packages/es5-shim/.npm/package/node_modules/es5-shim/es5-shim.js:417:1) I20160402-16:04:42.483(-4)? at Function..each..forEach (packages/underscore/underscore.js:105:1) I20160402-16:04:42.483(-4)? at after (packages/matb33_collection-hooks/insert.js:34:1) I20160402-16:04:42.483(-4)? at Object.CollectionHooks.defineAdvice.self (packages/matb33_collection-hooks/insert.js:49:1) I20160402-16:04:42.485(-4)? at Object.collection.(anonymous function) [as insert] (packages/matb33_collection-hooks/collection-hooks.js:117:1) I20160402-16:04:42.485(-4)? at [object Object].Mongo.Collection.(anonymous function) [as insert] (packages/mongo/collection.js:590:1) I20160402-16:04:42.485(-4)?
at AccountsServer.Ap.insertUserDoc (accounts_server.js:1248:25) I20160402-16:04:42.486(-4)? at createUser (password_server.js:980:25)

Hat keine Ahnung, jemand, was genau passiert ist?

Antwort

0

Die Variable ROLES ist nicht im Zusammenhang mit Ihrem Hook definiert. Es ist entweder kein Global oder Sie verwenden Meteor 1.3 und Sie haben es nicht aus der Datei, in der Sie es definiert haben, exportiert und in die Datei importiert, in der Sie Ihren Hook definiert haben.

+0

Das macht Sinn. Das ist der Punkt, an dem ich festgefahren bin, obwohl es global ist. Ich benutze Meteor 1.2.1 –

+0

Definieren Sie es ohne eine 'var' - nur' ROLES = {} 'in einer Datei unter'/lib' –

+0

Dies wird den internen Serverfehler loswerden und der Benutzer wird erstellt, aber die Rolle Array kehrt leer zurück, wenn ich den Benutzer in der Konsole abrufe. –

Verwandte Themen