api-admim/app/rbac/auth.py

47 lines
1.3 KiB
Python

from fastapi import Depends
from fastapi_users import FastAPIUsers, UUIDIDMixin, BaseUserManager
from fastapi_users.authentication import BearerTransport, AuthenticationBackend, JWTStrategy
from fastapi_users_db_sqlalchemy import SQLAlchemyUserDatabase
from sqlalchemy.ext.asyncio import AsyncSession
from app.database import session
from app.database.models import RbacUser
import uuid
from app.config import SECRET
bearer_transport = BearerTransport(tokenUrl="autenticacao/login")
def get_jwt_strategy() -> JWTStrategy:
return JWTStrategy(
secret="SECRET_KEY",
lifetime_seconds=3600,
)
auth_backend = AuthenticationBackend(
name="jwt",
transport=bearer_transport,
get_strategy=get_jwt_strategy,
)
async def get_user_db(session_get_user_db: AsyncSession = Depends(session.get_db)):
yield SQLAlchemyUserDatabase(session_get_user_db, RbacUser)
# class UserManager(UUIDIDMixin, BaseUserManager[RbacUser, uuid.UUID]):
class UserManager(UUIDIDMixin, BaseUserManager[RbacUser, uuid.UUID]):
reset_password_token_secret = SECRET
verification_token_secret = SECRET
async def get_user_manager(user_db: SQLAlchemyUserDatabase = Depends(get_user_db)):
yield UserManager(user_db)
fastapi_users = FastAPIUsers[RbacUser, uuid.UUID](get_user_manager, [auth_backend])
current_active_user = fastapi_users.current_user(active=True)