플라스크 응용 프로그램의 사용자 이름/암호 인증을 구축 중입니다. 사용자가 등록 할 때 사용자 이름과 암호를 mongodb 문서에 저장합니다.플라스크의 해시 된 암호를 인증 할 수 없습니다.
이 내 사용자 모델이다 : 나는 각각의 암호를 확인/생성 generate_password_hash 및 check_password_hash WERKZEUG 라이브러리 방법을 사용하고
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)
.
이는 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
을 그의 정보는에, 데이터베이스에 덤프되었습니다 내가 콘솔을 통해 새 사용자의 암호 해시를 확인하는 코드를 실행하면, 그것을 잘 작동합니다 데이터베이스에서 해시 된 암호를 검색해야하는 후속 로그인 시도는 검사가 작동하지 않습니다.
>>check_password_hash(find_by_username('jon').password,'abcd')
False
이 문제가 발생하는 이유는 무엇입니까? 내 첫 번째 본능을 검색 한 후 문자열을 저장하는 것처럼 보이기 때문에 다른 방법으로 mongodb에 해시 암호를 저장하거나 검색해야 할 수도 있습니다. 어떤 아이디어?
이 문제를 해결 했습니까? – aezell