我有一个与 NodeJs 应用程序一起使用的现有数据库,现在相同的数据库将用于使用 Django 构建的新应用程序。
我有一个 user_account 表,用于存储用户登录凭据以及密码加密bcrypt模块已被使用。密码存储在字段 user_password 中
我已经扩展了 Django Users 模型并覆盖了它authencticate
方法,效果很好。
对于密码验证我正在使用bcrypt method bcrypt.checkpw(password, hashed)
这也工作正常。
Problem:我想使用 djangouser.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
我在用姜戈2.1 and
Python 3.6
我已经检查过相关问题,但所有问题都与表单有关,而且我没有使用任何 django 表单。
My 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>