У меня есть существующая база данных, которая используется с приложением NodeJs, теперь эта же база данных будет использоваться для нового приложения, созданного с помощью Django.У меня есть таблица user_account, в которой хранятся учетные данные пользователя и для шифрования пароля * был использован модуль bcrypt . Пароль хранится в поле user_password
Я расширилDjango Users моделирует и переопределяет метод authencticate
, который работает нормально.Для изменения пароля я использую bcrypt метод bcrypt.checkpw(password, hashed)
, который тоже работает нормально.
Проблема: Я хочу использовать django user.check_password(password)
вместо bcrypt.checkpw(password, hashed)
.Так как это избавит от необходимости генерировать соль и кодировать до сопоставления пароля, и, прежде всего, это встроенный метод для единственной цели.
import bcrypt
from django.contrib.auth.hashers import check_password
#password = plain text password entered by user at login
#hashedPassword = Password stored in db (fieldName: user_password)
check_password(password, hashedPassword) #It returns False
user.check_password(password) # It also returns False
#for same password
bcrypt.checkpw(password, hashedPassword) # returns True
#hashedPassword format $2b$12$NNVaNL2Zla0E/WwC6Mkjjer6Qh3zIBCN6kMl9qxLE/xxyt4NAgXMq
Я использую Django 2.1 и Python 3.6
Я уже проверил связанные вопросы, но все они имели проблемы с формамии я не использую какую-либо форму django.
Мои settings.py
хэши:
PASSWORD_HASHERS = [
'django.contrib.auth.hashers.BCryptSHA256PasswordHasher',
'django.contrib.auth.hashers.BCryptPasswordHasher',
'django.contrib.auth.hashers.PBKDF2PasswordHasher',
'django.contrib.auth.hashers.PBKDF2SHA1PasswordHasher',
'django.contrib.auth.hashers.Argon2PasswordHasher',
]
Метод ввода - простой шаблон django
<div class='col-md-12'>
<form action='/auth/login' method='post'>
{% csrf_token %}
<div class='form-group row'>
<label for='email'>Email</label>
<input type='email' class='form-control' id='email' name='username'>
</div>
<div class='form-group row'>
<label for='password'>Password</label>
<input type='password' class='form-control' id='password' name='password'>
</div>
<div class='form-group row'>
<button class='btn btn-outline-secondary' type='submit'>Log in</button>
</div>
</form>
</div>