我想知道是否有人用这个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