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

时间:2017-10-22 15:20:33

标签: python django django-models password-encryption login-control

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

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

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

例如我第一次创建用户,123上的密码保存在db上,如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')

4 个答案:

答案 0 :(得分:1)

用户对象具有称为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

答案 1 :(得分:0)

我认为你应该尝试django身份验证功能。

user = authenticate(username=username, password=password)

答案 2 :(得分:0)

你不应该比较密码:

if myUsers.password == password ..:

而是密码的哈希值:

if myUsers.password == myPasswordHashFunction(password) ..:

如何编写myPasswordHashFunction是您应该详细了解的内容,或者您​​最好使用django的authenticate函数。

如果您不是安全专家,请(请!)不要发明自己的方式来验证和授权用户。

答案 3 :(得分:-1)

默认情况下,df1 <- structure(list(col_1 = c("car truck", "car", "car boat", "truck boat" ), col_2 = c("car fish", "car boat", "boat car", "car")), class = "data.frame", row.names = c(NA, -4L)) 中提供的Django身份验证系统要求最终用户使用用户名和密码进行身份验证。 如果您使用电子邮件和密码进行用户身份验证,则需要一个自定义身份验证后端。该链接将为您提供帮助。

链接:https://stackoverflow.com/a/37332393/9563316

如果使用用户名和密码进行用户身份验证。您应该尝试这样的事情。

text.value = text.value + value.target.value; 

在此处查看文档:{​​{3}}