我想加密用户输入密码以在某些视图中与原始密码进行比较。我尝试导入和应用encrypt
方法:
import passlib.hash.django_pbkdf2_sha256
但它没有那个模块?
您可能正在寻找set_password
from models import User
new_user = User.objects.create(username='new_user', email='example@example.com')
new_user.set_password('newpassword')
或者,您可以使用make_password
from django.contrib.auth.hashers import make_password
from models import User
first_pass = User.objects.all()[0].password.split('$')
hasher = first_pass[0]
salt = first_pass[1] # grabbing salt from the first password of the database
make_password('newpassword', salt, hasher)
您应该只使用以下authenticate
方法django.contrib.auth
:
test_user = authenticate(username=..., password=...)
如果凭据有效,将返回一个新用户,但这不会更改当前登录的用户。如果某些用户使用不同的加密方案,或者您使用自定义身份验证后端,这仍然有效。
如果由于某种原因你仍然需要重现 Django 的加密,你可以使用django.utils.crypto.pbkdf2
,但同样,你可能会更好地使用更高级别的check_password
函数django.contrib.auth.hashers
:
check_password(new_password, encoded_password)