Skip to main content
 首页 » 编程设计

python之Django Python 如何比较加密用户的密码

2024年10月01日34findumars

我正在做一个类似于网站 CMS(内容管理系统)的项目。我正在用 django python 开发这个系统。但我是 django python 的新手。

我有自己的用户模型(不是 Django 用户模型),其中包含一些字段,例如用户名、电子邮件、密码等,我从自己的管理面板创建新用户。

如何将加密密码与登录页面上发布的用户密码进行比较。

例如,我第一次创建用户时,123 的密码保存在数据库中,如 pbkdf2_sha24123$000asd$...之后,我尝试使用密码 123 登录,但出现密码不相等的错误。

from django.contrib.auth.hashers import make_password 
from account.models import myUsers 
 
password = make_password(request.POST.get('password')) 
email = request.POST.get('email') 
 
if myUsers.password == password and myUsers.email == email: 
     #make login and redirect to panel 
else: 
     #show error message 

我自己的模型喜欢;

class myUsers(models.Model): 
    username = models.CharField(max_length=25, verbose_name='username', unique=True) 
    email = models.CharField(max_length=225, verbose_name='email', unique=True) 
    password = models.CharField(max_length=225, verbose_name='password') 
    created_at = models.DateTimeField(auto_now_add=True, verbose_name='created date') 
    secret_question = models.CharField(max_length=225, verbose_name='secret question') 
    secret_answer = models.CharField(max_length=225, verbose_name='secret answer') 
    last_login = models.DateTimeField(verbose_name='last login') 
    secret_guid_key = models.CharField(max_length=15, verbose_name='recover key', unique=True, editable=False, default=uuid.uuid4().hex[:15]) 
    user_role = models.CharField(max_length=6, verbose_name='member role') 

请您参考如下方法:

用户对象有一个名为 check_password() 的方法,它会根据存储在数据库中的散列密码散列并检查您的纯文本密码。

https://docs.djangoproject.com/en/2.2/ref/contrib/auth/#django.contrib.auth.models.User.check_password

示例用法:

from account.models import myUsers 
 
password = request.POST.get('password') 
email = request.POST.get('email') 
 
user = myUsers.objects.get(email=email) 
 
if user.check_password(password): 
    # Success Code 
else: 
    # Error Code