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?
Das macht Sinn. Das ist der Punkt, an dem ich festgefahren bin, obwohl es global ist. Ich benutze Meteor 1.2.1 –
Definieren Sie es ohne eine 'var' - nur' ROLES = {} 'in einer Datei unter'/lib' –
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. –