【发布时间】:2013-10-31 08:00:22
【问题描述】:
我想知道是否有人使用过这个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_password_in_db),它返回false 或true。
有没有办法实现这一点,还是我必须推出自己的自定义解决方案?谢谢
【问题讨论】:
-
感谢您的链接,因为项目主页上似乎缺少该链接。请您看一下更新后的问题吗?谢谢
标签: python flask flask-httpauth