2012-03-28 11 views
2

Ich habe eine alte Datenbank von Benutzern, die Passwörter Hashes in einer Weise enthält, die ich nicht mag. Ich möchte für diese Hashes auf ein neues Hash-Formular (bcrypt) bei der Anmeldung aktualisiert werden.Wie Symfony Passwort-Check überschreiben, um in der Lage zu sein, gegen mehrere Arten von Hashes zu überprüfen

Ich verwende FOSUserBundle, um Benutzer und Elnur's bcrypt bundle als Sicherheits-Encoder zu verwalten. Gibt es eine einfache Art und Weise in den Passwort Prüfmechanismus zu stopfen, diese Art von Algorithmus hinzuzufügen:

if passwordHash is using old format 
    oldFormatHash := hash userGivenPassword in the old way 
    if oldFormatHash == passwordHash 
    login ok 
    update password in database with new hash format 
    else 
    login ko 
else 
    use default 

Ich dachte über die aktuellen Sicherheitscodierer erstreckt, aber die isPasswordValid Methode nicht die ID des Kontos muss zu überprüfen (oder sein kanonischer Name), so dass der Aktualisierungsteil nicht verfügbar ist.

Antwort

1

Falls es jemandem helfen kann, der mit diesem Problem konfrontiert ist, hier ist die Lösung, die ich verwendet habe. Die alte Methode zum Speichern der Kennwörter in der Datenbank verwendete keine Salze. Also habe ich diese Spalte aktualisiert, um die ID des Benutzers zu enthalten.

Dann war es einfach, meinen eigenen Sicherheits-Encoder mit dem Parameter salt zu erstellen, um die Kennworthashes des Benutzers zu aktualisieren.