gpt4 book ai didi

python - flask-httpauth:get_password 装饰器是如何为 basic-auth 工作的?

转载 作者:太空宇宙 更新时间:2023-11-03 13:19:23 26 4
gpt4 key购买 nike

不知道有没有人用过这个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(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_pa​​ssword_in_db) 方法,它返回 false 或 true。

有没有办法实现这一点,还是我必须推出自己的自定义解决方案?谢谢

最佳答案

我是 Flask-HTTPAuth 的开发者。抱歉,我错过了这个问题。

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

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

希望对您有所帮助!

关于python - flask-httpauth:get_password 装饰器是如何为 basic-auth 工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19518042/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com