Comments 3
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.Очень крутая статья по аутентификации. Было бы славно подробнее раскрыть различные способы передачи токена, например, Bearer. Есть ли простой способ сделать эндпоинты защищенными в swagger'е с использованием вашего метода аутентификации?
Sign up to leave a comment.
Создание собственного API на Python (FastAPI): Авторизация, Аутентификация и роли пользователей