Как стать автором
Обновить

Комментарии 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.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории