【问题标题】:python passlib verify doesn't matchpython passlib验证不匹配
【发布时间】:2016-10-03 04:38:56
【问题描述】:

我正在使用 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

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

【问题讨论】:

    标签: python mongodb passlib


    【解决方案1】:

    这是因为你加密的不是self.password,而是'self.password'

    所以你需要把你的addUser方法改成下面这样:

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

    【讨论】:

    • 天哪,太明显了 XDXD - 谢谢!
    猜你喜欢
    • 2015-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-14
    • 2016-03-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多