2013-04-12 62 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) 

我存儲密碼使用sha256_crypt.encrypt("password_string")http://pythonhosted.org/passlib /我可以驗證與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輪= 80000 $ zvpXD3gCkrt7tw.1 $ QqeTSolNHEfgryc5oMgiq1o8qCEAcmye3FoMSuvgToC

所以它實際需要所有這些前三個部分,再加上明文密碼散列同樣的方式。

要做到這一點,首先讓你的用戶的信息:

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

然後做了驗證:

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