2017-01-14 9 views
0

Ich habe eine kleine Flask-App (Python3), die ein wenig komplizierter wird, also entschied ich mich, von SQLite zu Postgresql zu wechseln. Ich wusste, dass dies ein paar Probleme für mich werfen würde, aber meine Codebasis hat eine anständige Testabdeckung, so dass ich zuversichtlich war, dass ich alle Falten ausbügeln konnte, bevor ich in die Produktion ging.Bcrypt Invalid Salt und Postgresql

Insbesondere überall, wo ich ein Passwort eingegeben habe, musste ich kodieren (password.encode('utf-8')).

(Nebenbei, Zeitzonen der andere Bereich waren ich hatte einige Probleme. Ich landete schließlich auf Zeitzonen von jedem Zeitpunkt zu entfernen war ich mit.)

Aber es gibt nur noch einen letzten Fehler, den ich nicht herausfinden kann. Um zu testen, dass Passwörter aktualisieren Ich habe folgenden Test:

self.assertTrue(bcrypt.check_password_hash(
    user.password, new_password 
)) 

, die das aktuelle Passwort überprüfen soll (die wie ein Byte Stachel aussieht, wenn ich es drucken) gegen die new_password. Aber ich bekomme eine Fehlermeldung ValueError: Invalid salt

Ich würde gerne wissen, wie das zu beheben, aber ich würde auch gerne jemanden zu erklären, was hier los ist.

Antwort

1

So stellte sich heraus, das Problem war die Art, wie ich das Passwort gespeichert habe. In diesem speziellen Fall hätte ich das Passwort wie folgt gespeichert haben:

user.password = bcrypt.generate_password_hash(
     request.form['password'] 
).decode('utf-8') 

db.session.commit() 

Jetzt funktioniert der obige Test.