2013-04-12 2 views
1

함수를 사용하여 sqlalchemy 쿼리에서 암호를 확인하는 방법은 무엇입니까? 함수를 사용하여 sqlalchemy 쿼리에서 암호를 확인하는 방법은 무엇입니까?

class PersonModel(Base): 
    __tablename__ = 'persons' 
    username = Column(String(30), nullable=False) 
    email = Column(String(75), nullable=False) 
    password = Column(String(128), nullable=False) 

에서 내가 http://pythonhosted.org/passlib에서 sha256_crypt.encrypt("password_string")를 사용하여 암호를 저장/내가 sha256_crypt.verify(password_to_check_against, hash)

이 (

person = session.query(PersonModel).filter(and_(PersonModel.username.like(username), PersonModel.password.like(sha256_crypt.encrypt(password_string)))).first() 

같은 노력으로 확인할 수 있지만 작동하지 않는 => sha256_crypt.encrypt (password_string) 동일한 암호에 대해 db와는 다른 값을 생성하므로 == 연산자 만 sha256_crypt.verify 사이트에서 사용 가능) 방법 내 질문에 이걸 주입 해?

답변

4

sha256_crypt.verify()을 사용해야하며 확인을 위해 암호 해시 문자열이 필요하므로 AND 절에서이를 수행 할 수 없습니다.

이 기능에 대한 출력의 예를 보면, 그리고 documentation for "modular crypt format" :

$ 5 $ 원 = 80,000 $ zvpXD3gCkrt7tw.1 $ QqeTSolNHEfgryc5oMgiq1o8qCEAcmye3FoMSuvgToC 상기

그래서 실제로 그 처음 세 개의 부품이 모두 필요 플러스 일반 텍스트 암호가 같은 방법으로 해시하는 것입니다.

is_authenticated = sha256_crypt.verify(password_string, person.password) 
:

person = session.query(PersonModel).filter(PersonModel.username.like(username)).first() 

은 그런 검증을 수행

먼저 사용자의 정보를 얻을,이 작업을 수행하려면
관련 문제