Метод check_password
Метод check_password применяется к экземпляру модели User и выполняет проверку соответствия переданного пароля хешированному паролю, хранящемуся в базе данных. Метод возвращает булево значение: True, если пароль верный, и False в противном случае. Этот метод автоматически обрабатывает различные алгоритмы хеширования, поддерживаемые Django, и учитывает соль пароля.
Метод принимает один обязательный параметр - проверяемый пароль в виде строки, и один необязательный параметр, позволяющий задать хеш-значение для проверки. В большинстве случаев используется только первый параметр, поскольку хеш берется из атрибута password текущего пользователя.
Синтаксис
user.check_password(raw_password)
Параметры
⁅list⁆ ⁅item⁆ ⁅b⁆raw_password⁅/b⁆ - строка, содержащая пароль в открытом виде, который необходимо проверить. ⁅/item⁆ ⁅item⁆ ⁅b⁆setter⁅/b⁆ (необязательный) - вызываемый объект, который будет использоваться для обновления хеша пароля, если текущий алгоритм устарел. ⁅/item⁆ ⁅/list⁆
Пример . Проверка пароля
Давайте проверим пароль для существующего пользователя:
from 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')
Результат выполнения кода:
"Password is correct"
Пример . С неверным паролем
Проверим, что происходит при вводе неправильного пароля:
from 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')
Результат выполнения кода:
"Access denied"
Пример . В представлении
Используем метод для аутентификации пользователя во views:
from 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,
которая выполняет вход пользователя в систему