2016-04-02 4 views
3

Ich versuche nun das Passwort eines anderen Benutzers auf der Meteor Admin-Seite zu setzen.Ist es möglich, ein anderes Benutzer-Passwort in Meteor zu setzen, wenn Sie Administratorrechte haben?

Hier ist mein Code.

Meteor.methods({ 
    updateUserPassword: function(userId, password) { 
    var loggedInUser = Meteor.user() 

    if (!loggedInUser || 
     !(Roles.userIsInRole(loggedInUser, ['admin'], 'default_group')) || (loggedInUser._id == userId)) { 
     throw new Meteor.Error(403, "Access denied") 
    } 

    return Accounts.setPassword(userId, password); 
    } 
}); 

Aber wenn ich diesen Code ausführen, bekomme ich Accounts.setPassword undefiniert Fehler ist.

Ich habe Konten-Passwort und Konten-Basis-Pakete hinzugefügt, aber es zeigt immer noch undefined Fehler, so vermute ich, wenn das Accounts.setPassword nicht mehr unterstützt wird.

Bitte helfen Sie mir, wie Sie mit diesem Problem umgehen!

+0

Die Funktion "Accounts.setPassword" kann nur vom Server aus aufgerufen werden. Erhalten Sie den Fehler in Ihrer Browserkonsole? –

+0

Ja, ich erhalte den Fehler in der Browserkonsole. Wie kann ich dieses Problem lösen? –

+0

Überprüfen Sie meine Antwort. –

Antwort

3

Accounts.setPassword ist eine Server-only Funktion in Meteor. Wenn Sie den Fehler in Ihrer Browser-Konsole erhalten, liegt das daran, dass Ihre updateUserPassword-Methode in lib/ Ordner oder irgendwo ähnlich deklariert ist und sowohl von clientseitigen und serverseitig zugegriffen werden kann.

Normalerweise ist es wünschenswert, Meteor.methods in lib/ Ordner deklariert werden, um Meteor Latency Compensation Technik (auch Methodensimulation genannt) zu nutzen.

In Ihrem Fall ist das nicht wünschenswert, weil Accounts.setPasswordserver-only ist.


Lösung 1:

können Sie verwenden Meteor.isClient und Meteor.isServer zu bestimmen, welcher Code ausgeführt werden, wo. (Sie können auch this.isSimulation verwenden).

 
Meteor.methods({ 
    updateUserPassword: function(userId, password) { 
    var loggedInUser = Meteor.user() 

    if (!loggedInUser || 
     !(Roles.userIsInRole(loggedInUser, ['admin'], 'default_group')) || (loggedInUser._id == userId)) { 
     throw new Meteor.Error(403, "Access denied") 
    } 

    if(Meteor.isServer) { 
     return Accounts.setPassword(userId, password); 
    } else if(Meteor.isClient) { 
     // do something else 
    } 
    } 
}); 

Lösung 2:

Sie, indem Sie die Datei auf dem Server-only server/ Ordner oder platzieren die Gesamtheit der Meteor.methods Erklärung der Meteor.methods auf der Server-Seite erklären innerhalb a if(Meteor.isServer) { ... } überprüfen.

Dies sollte verwendet werden, wenn keine Latenzkompensation erforderlich ist.

Verwandte Themen