【问题标题】:Django - How to authenticate a password with MD5 hashDjango - 如何使用 MD5 哈希验证密码
【发布时间】:2016-05-27 23:28:29
【问题描述】:

所以我尝试在我的视图中使用身份验证方法,但总是返回“不存在”,我正在为我的密码字段使用 MD5 哈希,所以我不知道这是否是问题

forms.py

class LoginForm(forms.Form):
    email = forms.EmailField()
    password = forms.CharField(widget=forms.PasswordInput)

    #This Method Hash the password
    def clean_password(self):
        clearPassNoHash = self.cleaned_data['password']
        self.password = md5.new(clearPassNoHash).hexdigest()
        return self.password

views.py

def auth_login(request):
    args = {}
    form = LoginForm(request.POST)
    email = request.POST['email']
    password = request.POST['password']
    user = authenticate(email=email, password=password)
    if user is not None:
        login(request, user)
        print("Exist")
    else:
        print("Does not exist")

我已经尝试过实际有效的 check_password() 方法(在我的表单中) 但我不知道为什么我在使用 authenticate() 时遇到问题

------------------更新--------- ----------------------

Views.py

def auth_login(request):
    args = {}
    form = LoginForm(request.POST)
    if form.is_valid():
        username = form.cleaned_data['username']
        password = form.cleaned_data['password']

        user = authenticate(username=username, password=password)
        if user is not None:
            print("existe")
            print user
        else:
            print user

    args['form'] = form
    return render(request, 'login/login.html', args)

forms.py

class LoginForm(forms.Form):
    username = forms.CharField()
    password = forms.CharField(widget=forms.PasswordInput)

其他观察: 我的 settings.py 中有这个来使用我的自定义模型

AUTH_PROFILE_MODULE = 'StudentUsers.StudentRegistration'

这是我添加到模型中的用户名字段:

class StudentRegistration(AbstractBaseUser, models.Model):
    username = models.CharField(max_length = 25, null=False, default="", unique=True)

【问题讨论】:

  • 这个认证方法是什么?用户真的存在吗?你真的应该在检查 form.is_valid() 之后使用 form.cleaned_data
  • authenticate(email=email, password=password),是的,我的用户存在
  • 从您的问题中可以清楚地看出您正在调用身份验证方法。我的问题是该身份验证方法到底是什么?它来自哪里?

标签: python django hash django-forms django-views


【解决方案1】:

您需要从表单的 clean_data 中获取电子邮件和密码,而不是直接从请求中获取。阅读文档中有关cleaned_data 属性的更多信息:https://docs.djangoproject.com/en/1.9/ref/forms/api/#django.forms.Form.cleaned_data

password = form.cleaned_data['password']

【讨论】:

    【解决方案2】:

    您不应该自己散列密码值。这就是authenticate 已经在做的事情;所以实际上你是在散列两次。

    【讨论】:

    • 现在我已经删除了我的 clean_password 方法,所以我传递明文进行身份验证,另外,我在我的模型中添加了一个用户名字段,所以现在我使用我的电子邮件进行身份验证,但是它一直给我发送
    • 你可以看到我的更新,会不会是我的 Md5hash?
    • 您可能首先需要展示您是如何创建用户的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-03-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多