python / intermediate
Snippet
Signierte zeitkritische Tokens für Einmal-URLs in Django
TimestampSigner von Django ermöglicht das sichere Signieren beliebiger Daten mit einem eingebetteten Zeitstempel. Dies eignet sich hervorragend für zeitkritische, manipulationssichere URLs wie Passwort-Resets oder Einmal-Bestätigungslinks ohne Datenbank-Persistence.
snippet.py
python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
from django.core.signing import TimestampSigner, SignatureExpired, BadSignaturesigner = TimestampSigner()def generate_action_token(user_id: int) -> str:return signer.sign(f"action-confirm:{user_id}")def verify_action_token(token: str, max_age_seconds: int = 3600) -> int | None:try:unsigned_value = signer.unsign(token, max_age=max_age_seconds)prefix, user_id_str = unsigned_value.split(":")return int(user_id_str)except (SignatureExpired, BadSignature):return None
django
Erklärung
1
from django.core.signing import TimestampSigner, SignatureExpired, BadSignature
Importiert Djangos kryptografische Signatur-Tools und Ausnahmeklassen zur Validierung.
2
signer = TimestampSigner()
Erstellt eine Signierer-Instanz, die Signatur-Werten einen Zeitstempel hinzufügt.
3
return signer.sign(f"action-confirm:{user_id}")
Erzeugt einen signierten, URL-sicheren String inklusive Nutzdaten und Zeitstempel-Digest.
4
unsigned_value = signer.unsign(token, max_age=max_age_seconds)
Überprüft die Authentizität und prüft, ob das Alter des Tokens innerhalb von max_age_seconds liegt.
5
except (SignatureExpired, BadSignature):
Fängt ungültige Signaturen oder abgelaufene Tokens ab und gibt sicher None zurück.