47 lines
1.3 KiB
Python
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)
|
|
|