Как правильно сделать функцию logout при использовании JWT-токена
Python
Middle
Без компании
Как правильно сделать функцию logout при использовании JWT-токена
Ответы
Для реализации logout с JWT обычно используют черный список токенов (blacklist). Так как JWT самодостаточны и не хранят состояние на сервере, нужно явно помечать недействительные токены.
Пример реализации с Flask и PyJWT:
```
from flask import request, jsonify
import jwt
from datetime import datetime, timedelta
blacklisted_tokens = set()
SECRET_KEY = 'your-secret-key'
def logout():
token = request.headers.get('Authorization').split()[1]
blacklisted_tokens.add(token)
return jsonify({"message": "Successfully logged out"}), 200
def verify_token(token):
if token in blacklisted_tokens:
return False
try:
jwt.decode(token, SECRET_KEY, algorithms=['HS256'])
return True
except:
return False
```
Ключевые моменты:
- Храним недействительные токены в памяти (в продакшне лучше Redis)
- При logout добавляем токен в blacklist
- При каждом запросе проверяем, не в blacklist ли токен
Альтернативный подход - использовать короткое время жизни токена (например, 15 минут) + refresh токены, но это менее безопасно.