РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
583 of 818 menu

Функция update_session_auth_hash

Функция update_session_auth_hash применяется к объекту запроса и модели пользователя для синхронизации хэша сессии с новым паролем. Она принимает два обязательных аргумента: объект запроса и объект пользователя. Без вызова этой функции после смены пароля пользователь будет автоматически разлогинен, так как хэш сессии перестанет соответствовать новому паролю.

Синтаксис

from django.contrib.auth import update_session_auth_hash update_session_auth_hash(request, user)

Пример

Рассмотрим базовый пример использования функции во вьюхе для смены пароля:

from django.contrib.auth import update_session_auth_hash from django.contrib.auth.forms import PasswordChangeForm from django.shortcuts import render, redirect from django.contrib import messages def change_password(request): if request.method == 'POST': form = PasswordChangeForm(request.user, request.POST) if form.is_valid(): user = form.save() update_session_auth_hash(request, user) messages.success(request, "Password changed successfully") return redirect('profile') else: form = PasswordChangeForm(request.user) return render(request, 'change_password.html', {'form': form})

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

"Password changed successfully" "User remains logged in"

Пример

Пример использования функции при ручной смене пароля без использования формы:

from django.contrib.auth import update_session_auth_hash from django.contrib.auth.models import User from django.shortcuts import redirect def manual_password_change(request): user = request.user new_password = "new_secure_password_123" user.set_password(new_password) user.save() update_session_auth_hash(request, user) return redirect('profile')

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

"User password updated" "Session hash synchronized"

Пример

Важно помнить, что без вызова update_session_auth_hash пользователь будет разлогинен. Демонстрация проблемы:

from django.contrib.auth.models import User from django.shortcuts import redirect def broken_password_change(request): user = request.user user.set_password("new_password") user.save() # Пропущен вызов update_session_auth_hash # Пользователь будет разлогинен return redirect('profile')

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

"Password changed but user is logged out" "User redirected to login page"

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

  • функция authenticate,
    которая проверяет учетные данные пользователя
  • функция login,
    которая авторизует пользователя в системе
  • функция logout,
    которая разлогинивает пользователя
  • метод set_password,
    который устанавливает новый хэш пароля для пользователя
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить