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

SignatureExpired

Исключение SignatureExpired является подклассом BadSignature и возникает в Django при использовании функций подписи, когда срок действия подписи истек. Это исключение выбрасывается методами signer.unsign и TimestampSigner.unsign при проверке временных меток. Основная причина - попытка верификации подписи после истечения установленного максимального срока действия. Исключение содержит информацию о времени создания подписи и текущем времени.

Синтаксис

from django.core.signing import TimestampSigner, SignatureExpired signer = TimestampSigner() try: value = signer.unsign(signed_value, max_age=60) except SignatureExpired as e: # Обработка истекшей подписи pass

Пример

Рассмотрим базовый пример создания и проверки подписи с ограниченным сроком действия:

from django.core.signing import TimestampSigner, SignatureExpired from datetime import datetime, timedelta signer = TimestampSigner() data = "user_id:123" # Создаем подпись signed_data = signer.sign(data) print(signed_data) # Пытаемся верифицировать подпись (срок жизни 10 секунд) try: value = signer.unsign(signed_data, max_age=10) print(f"Подпись действительна: {value}") except SignatureExpired as e: print(f"Ошибка: {e}")

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

"user_id:123:1mnb2v3c4x5z6a7s8d9f" "Подпись действительна: user_id:123"

Пример

Пример обработки истекшей подписи при верификации токена восстановления пароля:

from django.core.signing import TimestampSigner, SignatureExpired from django.http import JsonResponse def verify_reset_token(request, token): signer = TimestampSigner() try: # Проверяем токен, срок жизни 1 час (3600 секунд) user_id = signer.unsign(token, max_age=3600) return JsonResponse({ "status": "success", "user_id": user_id }) except SignatureExpired: return JsonResponse({ "status": "error", "message": "Срок действия токена истек" }) except Exception as e: return JsonResponse({ "status": "error", "message": "Недействительный токен" })

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

{ "status": "error", "message": "Срок действия токена истек" }

Пример

Пример использования исключения SignatureExpired для получения детальной информации о времени создания подписи:

from django.core.signing import TimestampSigner, SignatureExpired from datetime import datetime signer = TimestampSigner() data = "session_data" signed_data = signer.sign(data) try: value = signer.unsign(signed_data, max_age=5) except SignatureExpired as e: # Получаем информацию об истекшей подписи signature_obj = e.args[0] if e.args else None print(f"Ошибка истекшей подписи")

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

"Ошибка истекшей подписи"

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

  • исключение BadSignature,
    родительское исключение для ошибок подписи
  • класс ImproperlyConfigured,
    возникает при некорректной конфигурации
  • исключение DisallowedHost,
    выбрасывается при неразрешенном хосте
  • исключение SuspiciousSession,
    возникает при подозрительной сессии
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить