我想知道是否有人使用这个
flask extension来简化http-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装饰器似乎返回给定用户的清除密码,如果它与用户提供的密码匹配,则授权将被授予.
但是,没有人应该首先访问用户的明确密码.我通常会将明确的密码和用户名发送到后端,散列密码并将其与数据库中现有的哈希密码进行比较.
这是如何设想的?
更新:
与文档的链接更加轻松.因为有第二个装饰器需要实现这个:
@auth.hash_password
def hash_pw(username, password):
get_salt(username)
return hash(password, salt)
字面上规则是get_password(用户名)== hash_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.
有没有办法实现这一点,还是我必须推出自己的自定义解决方案?谢谢
最佳答案 我是Flask-HTTPAuth的开发者.对不起我错过了这个问题.
我刚刚发布了一个新版本,它为您提供了一种使用自定义函数来验证密码的方法.您现在可以使用verify_password回调代替定义get_password和hash_password回调,从而完全由您自己完成密码验证.例如,在您的情况下,您将使用此回调:
@auth.verify_password
def verify_password(email, password):
return check_auth(email, password)
我希望这有帮助!