Привет!
Мне нужно сделать авторизацию на fastapi через уникальный токен uuid (9cab9946-1f80-4b71-b03e-95bebee70235). Токен будет выдаваться человеку вне сайт, и при входе с новой сессии человек должен будет подтвердить вход через тг бота.
На данный момент я делал что-то типа:
class AuthService:
security = HTTPBearer()
@staticmethod
async def get_current_user(
uow: UOWDep,
token: HTTPAuthorizationCredentials = Depends(security)
) -> UserSchemaFromDB:
user = await UserService().get_one(uow, auth_key=token.credentials)
if not user:
raise HTTPException(
status_code=status.HTTP_403_FORBIDDEN,
detail="Invalid authentication credentials"
)
return user
@staticmethod
async def get_current_active_user(user: UserSchemaFromDB = Depends(get_current_user)):
if not user.is_active:
# TODO: добавить проверку по сессии, сохранять сессии с которых было разрешено заходить, если вдруг появляется не разрешенная сессия не разрешать заходить
raise HTTPException(
status_code=status.HTTP_403_FORBIDDEN,
detail="User is not active. Make sure you're logged into telegram first."
)
return user
class AuthTokenService:
@staticmethod
def generate_token() -> str:
return str(uuid.uuid4())
@staticmethod
async def verify_token(token: str, uow: UOWDep):
user = await UserService().get_one(uow, token=token)
if token == user.auth_key:
return True
return False
К этому коду я хотел добавить просто роутер для входа и добавить только 5 попыток для входа, если человек пять раз вводит не правильно значение он попадает в бан на сайте. Но чувствует мое сердце, что это все не безопастно и не правильно. Можете подсказать какие ошибки я допускаю и как лучше выполнить такого рода авторизацию на сайте.