проверка python passlib не соответствует

#python #mongodb #passlib

#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 я создаю пользователя alice с паролем «секрет» :

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

Из оболочки mongo я проверяю, что документ был правильно создан с помощью хэша вместо четкого пароля :

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

С этого момента мы должны иметь возможность проверять пароль из оболочки python, используя хэш, сохраненный в документе, не так ли?

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

Но это не так, кто-нибудь может объяснить мне, почему?

Ответ №1:

Это происходит потому, что вы шифруете не self.password 'self.password'

Итак, вам нужно изменить свой addUser метод на следующий:

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

Комментарии:

1. Боже, так очевидно XDXD — Спасибо!