2015-03-19 10 views
7

Ich habe einen SignUp/SignIn-Prozess auf meiner Meteor-Site. Ich habe ein Formular, um neue Benutzer zu registrieren und ein Formular, um sich Benutzer anzumelden.Accounts.createUser() gibt undefined auf Client zurück

I init Benutzer auf serverside über

Accounts.createUser({username: "myusername", password: "mypassword"}); 

und ich kann meinen dummyusers über mein Loginformular auf den client anmelden in mit

Meteor.loginWithPassword(username, password) 

Ich weiß nicht, warum, aber aus irgendeinem Grunde ich kann nicht Erstellen Sie neue Benutzer auf der Clientseite. Wenn ich

Accounts.createUser({username: username, password: password}); 

Aufruf gibt es undefined (Safari)

ich die Eingabezeichenfolgen geprüft (Benutzername, Passwort) und dessen nicht die Erzeugung der Fehler sogar reinen Strings wie

Accounts.createUser({username: "test", password: "pass"}); 

kehrt undefined auf Client-Konsole.

I veröffentlicht und abonniert meinen Nutzern über:

Server

Meteor.publish('users', function() { 
    console.log("Server Log: publishing all users"); 
    return Meteor.users.find(); 
}); 

Kunde

Meteor.subscribe("users"); 

ich count() Benutzer auf der Client-Konsole auch kann, aber ich kann nicht Accounts.createUser() verwenden Also ist die createUser() Funktion nicht einmal Arbeit in meiner Konsole.

Warum kann ich Accounts.createUser() auf client/console nicht verwenden?

+1

mir einen Gefallen tun, benutzen Sie diesen 'Rückruf function' zu wissen, wo die Fehler kommen,' Accounts.createUser ({Benutzername: Benutzername, Passwort: Passwort}, Funktion (Fehler, Ergebnis) {if (Fehler) {console.log (error.reason}}); ' – Ethaan

+0

lustiger Fehler' Signups verboten'. sieht aus wie einige ungenutzte Pakete für Konten- Ui (meteorisch) waren das Problem. Entfernte sie. THX für den Hack mit dem Fehler. – Dude

+0

Danke dafür! – imarichardson

Antwort

11

Accounts.createUser ist eine asynchrone Funktion auf dem Client, da es den Server abfragen muss, um zu wissen, ob es tatsächlich erfolgreich war (der Benutzername oder die E-Mail könnte bereits verwendet werden). Der Rückgabewert einer asynchronen Funktion ist immer undefined, daher wird das Ergebnis erwartet.

Wenn Sie mit einem leeren Projekt und einer leeren Datenbank zu starten, könnten Sie tun:

Accounts.createUser({username: 'dave', password: 'password'}); 

die undefined, aber ein nachfolgender Aufruf von Meteor.userId() zurückkehren sollte einen String zurück.

Um, wenn der Aufruf erfolgreich war, um zu bestimmen, müssen Sie einen Rückruf liefern:

Accounts.createUser({username: 'dave', password: 'password'}, function(err) { 
    if (err) 
    console.log(err); 
    else 
    console.log('success!'); 
}); 
+0

Ich suchte nach einem Beispiel für den Rückruf beim manuellen Erstellen eines Benutzers. Danke. – imarichardson

Verwandte Themen