我正在構建燒瓶應用程序的用戶名/密碼驗證。當用戶註冊時,我將用戶名和密碼存儲在一個mongodb文檔中。無法在Flask中驗證散列密碼
這是我的用戶模型:
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
這裏是我的問題。假設我有一個用戶'jon',其密碼爲'abcd'。當我運行的代碼來檢查密碼哈希爲新用戶直通控制檯,它工作正常:
>> check_password_hash(generate_password_hash('abcd'),'abcd')
True
然而,經過「喬恩已經簽署了與他的信息已經被傾倒到數據庫中,在隨後嘗試登錄時,我不得不從數據庫中檢索哈希密碼,檢查不工作:
>>check_password_hash(find_by_username('jon').password,'abcd')
False
任何想法,爲什麼發生這種情況?一些谷歌搜索後,我的第一本能是,也許我需要以不同的方式在mongodb中存儲或檢索哈希密碼,因爲它似乎被存儲爲一個字符串。有任何想法嗎?
你解決了這個問題嗎? – aezell 2015-01-16 18:18:02