Задать вопрос
@Maxwell012

Как сделать авторизацию на fastapi?

Привет!
Мне нужно сделать авторизацию на 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 попыток для входа, если человек пять раз вводит не правильно значение он попадает в бан на сайте. Но чувствует мое сердце, что это все не безопастно и не правильно. Можете подсказать какие ошибки я допускаю и как лучше выполнить такого рода авторизацию на сайте.
  • Вопрос задан
  • 237 просмотров
Подписаться 1 Простой Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы