python passlib验证不匹配

时间:2016-10-02 20:27:26

标签: python mongodb passlib

我正在使用Flask和MongoDB,尝试使用passlib实现用户名/密码验证。

来自models.py的类:

from passlib.hash import sha256_crypt

class Users(object):
    def __init__(self, username='', password='', collection=db.users, articles=''):
    self.collection = collection
    self.username = username
    self.password = password
    self.articles = []

def addUser(self):
    self.collection.insert({'username': self.username, 'password': sha256_crypt.encrypt('self.password'), 'articles': self.articles})

在python shell中,我使用密码' secret'创建用户alice。 :

>>> import models
>>> alice = models.Users()
>>> alice.username = 'alice'
>>> alice.password = 'secret'
>>> alice.addUser()

从mongo shell中,我检查文档是否使用哈希而不是清除密码创建好:

> db.users.find()
{ "_id" : ObjectId("57f15d9f815a0b6c1533427f"), "username" : "alice", "articles" : [ ], "password" : "$5$rounds=535000$Oq1hy1INzO59nu0q$FzMz1DtBWDwM.sw0AhrlVA8esgE30n8rr/NjOltB8.7" }

从现在开始,我们应该能够使用文档中存储的哈希来验证python shell中的密码,不是吗?

>>> sha256_crypt.verify('secret','$5$rounds=535000$Oq1hy1INzO59nu0q$FzMz1DtBWDwM.sw0AhrlVA8esgE30n8rr/NjOltB8.7')
False

但它没有,有人可以向我解释为什么?

1 个答案:

答案 0 :(得分:0)

这种情况正在发生,因为您的加密不是self.password,而是'self.password'

因此,您需要将addUser方法更改为以下内容:

def addUser(self):
    self.collection.insert({'username': self.username, 'password': sha256_crypt.encrypt(self.password), 'articles': self.articles})