Flask-httpauth: get_password 装饰器如何为 basic-auth 工作?

2024-05-03

我想知道有没有人用过这个烧瓶延伸 https://github.com/miguelgrinberg/flask-httpauth简化 http-basic-auth。

基本上我不明白这个example https://github.com/miguelgrinberg/flask-httpauth#basic-authentication-example:

users = {
    "john": "hello",
    "susan": "bye"
}

@auth.get_password
def get_pw(username):
    if username in users:
        return users[username]
    return None

The 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 method.

问题是,我正在使用来自 passlib 的 sha256_crypt http://pythonhosted.org/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 的开发人员。抱歉我错过了这个问题。

我刚刚发布了一个新版本,为您提供了一种使用自定义函数来验证密码的方法。而不是定义get_password and hash_password您现在可以使用回调verify_password回调,将密码验证完全由您决定。例如,在您的情况下,您将使用此回调:

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

我希望这有帮助!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Flask-httpauth: get_password 装饰器如何为 basic-auth 工作? 的相关文章

随机推荐