我想知道是否有人用這個flask extension來簡化http-basic-auth。flask-httpauth:get_password裝飾器是如何爲basic-auth工作的?
基本上我不明白這個example:
users = {
"john": "hello",
"susan": "bye"
}
@auth.get_password
def get_pw(username):
if username in users:
return users[username]
return None
的get_password
裝飾好像返回給用戶的清除密碼,如果它給用戶提供了一個匹配,則該授權將被授予。
但是,沒有人應該首先獲得用戶的明確密碼。我通常會將清除的密碼和用戶名發送到後端,將密碼散列並將其與數據庫中現有的散列密碼進行比較。
這是如何設想的?
UPDATE:
的鏈接文檔揭示了一些更多的光。因爲實現這一目標有需要第二裝飾:
@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
方法中定義的當前哈希密碼。
問題是,我正在使用sha256_crypt from passlib。
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。
有沒有辦法實現這一點,還是我必須推出我自己的定製解決方案?謝謝
https://github.com/miguelgrinberg/Flask-HTTPAuth/blob/master/docs/index.rst – CBroe
感謝您的鏈接,因爲它似乎在項目中失蹤。請你看看最新的問題?謝謝 – Houman