2015-06-26 6 views
5

Passport.js bietet Authentifizierungs-Framework in Node.js. Es handelt sich nur um Authentifizierung.Zurücksetzen des Passworts in der Passport-lokalen Strategie in Sails.js

Jetzt möchte ich das Zurücksetzen des Passworts aktivieren. Da es im Benutzermodell kein Passwortfeld gibt, nur Pässe, wie kann ich das Passwort in der Pass-lokalen Strategie zurücksetzen? Ich nehme an, dass Benutzer ein neues Kennwort generieren und etwas aufrufen müssen, um den vorhandenen Hash des alten Kennworts zu überschreiben. Welche Methoden sind das und wo finde ich sie?

+0

Wie werden Sie das Passwort, ohne das Passwort-Feld zu speichern? –

+0

Pass-lokale Strategie angeblich automatisch ein Passwort für jeden Benutzer generiert und gespeichert irgendwo. Ich weiß nicht, wo es gespeichert ist und wie es geändert wird. – windchime

+0

Können Sie den Code für Ihr Benutzermodell hinzufügen? Für die afaik-Pass-lokale Strategie ist ein Feld für Benutzername und Passwort erforderlich. Bitte beachten Sie dies - http://passportjs.org/docs/configure –

Antwort

0

Wenn der Benutzer wählt, sein/ihr Passwort zurückzusetzen, können Sie dem Benutzer eine E-Mail mit einem Link senden, der ein mit dem Benutzer verknüpftes Token enthält. Sobald der Benutzer auf den Link klickt, validieren Sie den Benutzer anhand der Token-E-Mail-Adresse & und zeigen dann das HTML-Reset-Passwort an. Nachdem der Benutzer das neue Passwort eingegeben hat, legen Sie im Backend-Code nach dem Hashing das Passwort für das Objekt User fest und speichern es anschließend. Sie können das Token auch als null setzen.

Ein Beispielcode mit Base64 wird, wie unten

user.salt = new Buffer(crypto.randomBytes(16).toString('base64'), 'base64'); 
user.password = user.hashPassword('newPassword'); 
user.token = undefined; 
user.save(...) 
gezeigt

Die hashPassword Verfahren wie angegeben.

UserSchema.methods.hashPassword = function(password) { 
    if (this.salt && password) { 
     return crypto.pbkdf2Sync(password, this.salt, 10000, 64).toString('base64'); 
    } else { 
     return password; 
    } 
}; 

Der obige Code wird automatisch generiert mit Yeoman