Метод check_password

Метод check_password применяется к экземпляру модели User и выполняет проверку соответствия переданного пароля хешированному паролю, хранящемуся в базе данных. Метод возвращает булево значение: True, если пароль верный, и False в противном случае. Этот метод автоматически обрабатывает различные алгоритмы хеширования, поддерживаемые Django, и учитывает соль пароля.

Метод принимает один обязательный параметр - проверяемый пароль в виде строки, и один необязательный параметр, позволяющий задать хеш-значение для проверки. В большинстве случаев используется только первый параметр, поскольку хеш берется из атрибута password текущего пользователя.

Синтаксис

pythonuser.check_password(raw_password)

Параметры

⁅list⁆ ⁅item⁆ ⁅b⁆raw_password⁅/b⁆ - строка, содержащая пароль в открытом виде, который необходимо проверить. ⁅/item⁆ ⁅item⁆ ⁅b⁆setter⁅/b⁆ (необязательный) - вызываемый объект, который будет использоваться для обновления хеша пароля, если текущий алгоритм устарел. ⁅/item⁆ ⁅/list⁆

Пример . Проверка пароля

Давайте проверим пароль для существующего пользователя:

pythonfrom django.contrib.auth.models import User

# Получаем пользователя из базы данных
user = User.objects.get(username='john_doe')

# Проверяем пароль
is_correct = user.check_password('my_secret_password')

if is_correct:
  print('Password is correct')
else:
  print('Password is incorrect')

Результат выполнения кода:

python"Password is correct"

Пример . С неверным паролем

Проверим, что происходит при вводе неправильного пароля:

pythonfrom django.contrib.auth.models import User

user = User.objects.get(username='john_doe')

# Проверяем неверный пароль
is_correct = user.check_password('wrong_password')

if is_correct:
  print('Access granted')
else:
  print('Access denied')

Результат выполнения кода:

python"Access denied"

Пример . В представлении

Используем метод для аутентификации пользователя во views:

pythonfrom django.contrib.auth.models import User
from django.shortcuts import render, redirect
from django.contrib.auth import login

def login_view(request):
  if request.method == 'POST':
    username = request.POST.get('username')
    password = request.POST.get('password')

    try:
      user = User.objects.get(username=username)

      if user.check_password(password):
        login(request, user)
        return redirect('dashboard')
      else:
        error = 'Invalid password'
    except User.DoesNotExist:
      error = 'User not found'

    return render(request, 'login.html', {'error': error})

  return render(request, 'login.html')

Смотрите также

  • метод set_password,
    который устанавливает новый хешированный пароль пользователю
  • метод has_perm,
    который проверяет наличие определенного разрешения у пользователя
  • функция authenticate,
    которая выполняет полную проверку учетных данных пользователя
  • функция login,
    которая выполняет вход пользователя в систему