http-basic-auth を簡素化するために、このフラスコ拡張機能を使用した人がいるのだろうか。
基本的に、私はこの例を理解していません:
users = {
"john": "hello",
"susan": "bye"
}
@auth.get_password
def get_pw(username):
if username in users:
return users[username]
return None
デコレーターは、指定されたユーザーのクリア パスワードを返すように見え、get_password
それがユーザーが提供したものと一致する場合、承認が付与されます。
しかし、そもそもユーザーのクリア パスワードに誰もアクセスできないようにする必要があります。私は通常、クリア パスワードとユーザー名をバックエンドに送信し、パスワードをハッシュして、データベース内の既存のハッシュされたパスワードと比較します。
これはどのように想定されていますか?
アップデート:
ドキュメントへのリンクは、さらに光を当てます。これを達成するために必要な2番目のデコレータがあるため:
@auth.hash_password
def hash_pw(username, password):
get_salt(username)
return hash(password, salt)
ルールは文字通りget_password(username) == hash_password(password)
これが機能することを理解する方法はget_password
、データベース内のユーザーのハッシュされたパスワードを返すことです。これは、hash_password
メソッドで定義されている現在ハッシュされているパスワードと同じである必要があります。
問題は、私はpasslib から sha256_cryptを使用していることです。
def verify_password(password, hashed_password_in_db, password_hash_version):
if password_hash_version == 1:
return sha256_crypt.verify(password, hashed_password_in_db)
return False
ここでは、指定されたパスワードをハッシュして、保存されているハッシュされたパスワードと比較することはできません。sha256_crypt.verify(password, hashed_password_in_db)
false または true を返す method を使用する必要があります。
これを達成する方法はありますか、それとも独自のカスタム ソリューションを作成する必要がありますか? ありがとう