Bei PassportJS für einen User ein neues Passwort setzen
So kann man für einen vorhandenen Nutzer ein neues Passwort bei einer Local-Strategy von PassportJS setzen.
Ich habe gestern wirklich einige Stunden damit verbracht herauszubekommen, wie man bei PassportJS ein neues Passwort für einen vorhandenen Nutzer setzen kann. Das Problem besteht darin, dass das Password nicht in der Datenbank gespeichert wird, sondern aus einer Vielzahl von Hashes und Salts besteht. Einfach in der Datenbank überschreiben geht also nicht.
Leider ist die Dokumentation von PassportJS nicht sonderlich detailliert, sondern beschreibt meiner Meinung nach viele Detailprobleme nur sehr oberflächlich. Ich habe mich dann über verschiedene GitHub-Repos und Dokumentation gewühlt. Zuerst einmal habe ich festgestellt, dass es einen Funktion mit dem Namen findByUsername gibt. Man kann so recht einfach einen User anhand seines Usernames finden.
Die nächste Erkenntnis war, dass es einen Funktion mit dem Namen setPassword gibt. Diese Funktion klingt erst sehr gut. Ich hatte die Funktion immer und immer wieder probiert, aber leider hatte sich das Passwort nicht geändert.
var username = 'tobias.redmann'; var password = 'secret'; // get the user User.findByUsername(username, function(err, user){ // use the setPassword function user.setPassword(password, function(err) { // !important: save the user user.save(function(err) { // your error handling and code }); }); });
Erst nachdem man den User danach erneut speichert, werden die Änderungen am Passwort aktiv. Das ist aus meiner Sicht nicht sofort einleuchtend und hat wirklich enorm viel Zeit in Anspruch genommen.
Der o.g. Code-Schnipsel findet nun einen Nutzer anhand des Nutzernamens und setzt im Anschluss das neue Passwort. Ich habe in dem Beispiel keinerlei Error-Handling implementiert, d.h. so sollte man das nicht produktiv einsetzen.
Wenn der Beitrag hilfreich war, würde ich mich über einen Kommentar freuen und wenn der zahlreich in sozialen Netzwerken geteilt wird.
Mitdiskutieren