我想在某些视图中加密用户输入密码以与原始密码进行比较。我尝试导入并应用encrypt
方法:
import passlib.hash.django_pbkdf2_sha256
但它没有那个模块?
答案 0 :(得分:2)
您可能正在寻找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)
答案 1 :(得分:1)
您应该使用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)