Комментарии 1
if (not expire) or (expire_time < datetime.now(timezone.utc)): raise HTTPException(status_code=status.HTTP_401_UNAUTHORIZED, detail='Токен истек')
Проверка лишняя. jwt.decode
уже проверяет срок жизни токена. Первый except JWTError
это отловит.
from time import sleep
from datetime import datetime, timezone, timedelta
from jose import jwt
def create_access_token(data: dict) -> str:
to_encode = data.copy()
expire = datetime.now(timezone.utc) + timedelta(seconds=3)
to_encode.update({"exp": expire})
return jwt.encode(to_encode, "mysecret")
if __name__ == "__main__":
token = create_access_token({"some": "data"})
print(token)
sleep(5)
print(jwt.decode(token, algorithms=["HS256"], key="mysecret"))
>>eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzb21lIjoiZGF0YSIsImV4cCI6MTcyMTMwMTQ5MH0.KjLGf3chNy5pvx-vsYY_nKbSMNML0-LTR6PfD8dAXJA
>>Traceback (most recent call last):
>>...
>>jose.exceptions.ExpiredSignatureError: Signature has expired.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Создание собственного API на Python (FastAPI): Авторизация, Аутентификация и роли пользователей