【发布时间】:2014-11-23 17:56:18
【问题描述】:
我正在为烧瓶应用程序构建用户名/密码身份验证。当用户注册时,我将用户名和密码存储在一个 mongodb 文档中。
这是我的用户模型:
class User():
def __init__(self, userid=None,username=None,password=None):
self.userid= userid
self.username = username
self.password = generate_password_hash(password)
def __repr__(self):
return '<User %r>' % self.username
def is_authenticated(self):
return True
def is_active(self):
return True
def is_anonymous(self):
return False
def get_id(self):
try:
return unicode(self.userid)
except NameError:
return unicode(self.userid)
我正在使用 werkzeug 库方法 generate_password_hash 和 check_password_hash 分别生成/检查密码。
这是我将用户数据转储到 mongodb 的代码:
def db_dump(data):
k = {'username':data.username,'password':data.password}
db.users.insert(k,True)
这是我通过用户名检索用户数据的代码:
def find_by_username(username):
data = self.db.users.find_one({'username': username})
user = User(userid=unicode(data['_id']),username=data['username'],password=data['password'])
return user
这是我的问题。假设我有一个密码为“abcd”的用户“jon”。当我运行代码通过控制台检查新用户的密码哈希时,它工作正常:
>> check_password_hash(generate_password_hash('abcd'),'abcd')
True
但是,在 'jon' 注册并且他的信息已转储到数据库中之后,在我必须从数据库中检索散列密码的后续登录尝试中,检查不起作用:
>>check_password_hash(find_by_username('jon').password,'abcd')
False
知道为什么会这样吗?经过一番谷歌搜索后,我的第一直觉是,也许我需要以不同的方式在 mongodb 中存储或检索哈希密码,因为它似乎被存储为字符串。有什么想法吗?
【问题讨论】:
-
这个问题你解决了吗?