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,
возникает при подозрительной сессии