2013-10-22 28 views
2

我想知道是否有人用這個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。

有沒有辦法實現這一點,還是我必須推出我自己的定製解決方案?謝謝

+0

https://github.com/miguelgrinberg/Flask-HTTPAuth/blob/master/docs/index.rst – CBroe

+0

感謝您的鏈接,因爲它似乎在項目中失蹤。請你看看最新的問題?謝謝 – Houman

回答

1

我剛剛意識到這個問題仍然沒有答案。

我相信該項目flask-httpauth是偉大的情況下,你打算使用MD5散列。

但是和我一樣,如果你使用sha256_crypt你不能使它適用於這個擴展,因爲它的工作方式。 (看我更新的問題)

我最終做的是用燒瓶製造商寫的這個snippet

方法check_auth正是我所需要的,因爲它返回布爾值。

在我來說,我已經定義它像這樣使其與sha256_crypt

def check_auth(email, password): 
    em_login_provider = ndb.Key('AuthProvider', get_provider_id(constants.EMAIL, email)).get()   
    if em_login_provider and em_login_provider.active: 
     user = em_login_provider.user     
     if user and verify_password(password, user.password_hash, user.password_hash_version): 
      return True 
    return False 
4

我燒瓶HTTPAuth的開發工作。抱歉,我錯過了這個問題。

我剛剛發佈了一個新版本,可以讓您使用自定義函數驗證密碼。現在不用定義get_passwordhash_password回調,您現在可以使用verify_password回調,該回調使密碼驗證完全由您決定。例如,在你的情況下,你會使用這個回調:

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

我希望這有助於!