【问题标题】:How to use check_password function in django如何在 django 中使用 check_password 函数
【发布时间】:2020-06-02 04:50:55
【问题描述】:

我是 Django 的初学者。我有一个只有 2 个字段的注册表单。用户名和密码。密码使用 pbkdf2_sha256 算法加密。 我想使用用户名和密码登录。所以我在登录页面中输入的密码必须与加密密码一起检查。怎么做?。另外,请解释一下authenticate和check_password函数的作用?

def save(request):
    if request.method == 'POST':
       name = request.POST.get('name')
       password = request.POST.get('pass')
       enc_pass = pbkdf2_sha256.encrypt(password,rounds=12000,salt_size = 32)
       a = signup(username = name, password = enc_pass)
       a.save()
   return render(request,'save.html')
def login(request):
   if request.method  == 'POST':

       username        = request.POST.get('user')
       password1          = request.POST.get('password1')
       p = check_password(password=password1)
      if signup.objects.filter(username__exact=username).exists() and p is True:
           return HttpResponse("Success")
     else:
           return HttpResponse("Invalid Credentials")
   return render(request, 'login.html')

【问题讨论】:

  • 我写的代码还没写完,只需要知道如何使用check_password函数
  • 老实说,尝试使用默认的authenticate 方法来查找用户

标签: django


【解决方案1】:

你可以这样做:

if check_password(password_user_entered, request.user.password):
    # You can authenticate

这里,password_user_entered 是来自请求的密码(或者,要检查的密码)。并且,request.user.password 是我们要与之比较的密码。

【讨论】:

    【解决方案2】:

    check_password 不能这样工作。要使其工作,您需要使用 Django 自己的身份验证系统。如果你担心使用pbkdf2_sha256,Django 提供了这个hasher。要将其与您自己的身份验证系统一起使用,请将其添加到设置中:

    PASSWORD_HASHERS = [
        'django.contrib.auth.hashers.PBKDF2SHA1PasswordHasher',
        'django.contrib.auth.hashers.PBKDF2PasswordHasher',
        'django.contrib.auth.hashers.Argon2PasswordHasher',
    ]
    

    并且在 django 身份验证中,您不需要手动对其进行哈希处理,django 会自行处理。您需要做的就是像这样保存用户:

    from django.contrib.auth.models import User
    
    user = User.objects.create_user(username=username, email=email, password=password, #.. other required fields)
    

    并检查密码:

    user = User.objects.get(username=username)
    user.check_password(password)
    

    更多信息可以在documentation找到

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-08-29
      • 2013-01-21
      • 2017-12-05
      • 2013-11-21
      • 2015-02-22
      • 2020-04-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多