4

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 を使用する必要があります。

これを達成する方法はありますか、それとも独自のカスタム ソリューションを作成する必要がありますか? ありがとう

4

2 に答える 2

7

私は Flask-HTTPAuth の開発者です。申し訳ありませんが、私はこの質問を逃しました。

カスタム関数を使用してパスワードを確認する方法を提供する新しいバージョンをリリースしました。get_passwordおよびコールバックを定義する代わりに、パスワードの検証を完全に任せるコールバックをhash_password使用できるようになりました。verify_passwordたとえば、あなたの場合、次のコールバックを使用します。

@auth.verify_password
def verify_password(email, password):
    return check_auth(email, password)

これが役立つことを願っています!

于 2013-11-26T02:05:23.430 に答える