Spaces:
Sleeping
Sleeping
Download backend/core/security.py from orakzai-io/Rednote: direct link, hf CLI and curl.
- Browser
- Download file 2.07 kB
-
https://huggingface.co/spaces/orakzai-io/Rednote/resolve/main/backend/core/security.py
- Command line
-
hf download hf://spaces/orakzai-io/Rednote/backend/core/security.py
-
curl -L -o security.py https://huggingface.co/spaces/orakzai-io/Rednote/resolve/main/backend/core/security.py
2.07 kB
| # FastAPI Users — JWT-based authentication setup | |
| import uuid | |
| from typing import AsyncGenerator | |
| from fastapi import Depends, Request | |
| from fastapi_users import BaseUserManager, FastAPIUsers, UUIDIDMixin | |
| from fastapi_users.authentication import ( | |
| AuthenticationBackend, | |
| BearerTransport, | |
| JWTStrategy, | |
| ) | |
| from fastapi_users.db import SQLAlchemyUserDatabase | |
| from sqlalchemy.ext.asyncio import AsyncSession | |
| from db.session import get_async_session | |
| from models.db import User | |
| from core.config import settings | |
| SECRET = settings.SECRET_KEY | |
| class UserManager(UUIDIDMixin, BaseUserManager[User, uuid.UUID]): | |
| reset_password_token_secret = SECRET | |
| verification_token_secret = SECRET | |
| async def on_after_register(self, user: User, request: Request | None = None): | |
| print(f"User {user.id} has registered.") | |
| async def on_after_forgot_password( | |
| self, user: User, token: str, request: Request | None = None | |
| ): | |
| print(f"User {user.id} has forgot their password. Reset token: {token}") | |
| async def on_after_request_verify( | |
| self, user: User, token: str, request: Request | None = None | |
| ): | |
| print(f"Verification requested for user {user.id}. Verification token: {token}") | |
| async def get_user_db(session: AsyncSession = Depends(get_async_session)) -> AsyncGenerator[SQLAlchemyUserDatabase[User, uuid.UUID], None]: | |
| yield SQLAlchemyUserDatabase(session, User) | |
| async def get_user_manager(user_db: SQLAlchemyUserDatabase[User, uuid.UUID] = Depends(get_user_db)) -> AsyncGenerator[UserManager, None]: | |
| yield UserManager(user_db) | |
| bearer_transport = BearerTransport(tokenUrl="auth/jwt/login") | |
| def get_jwt_strategy() -> JWTStrategy[User, uuid.UUID]: | |
| return JWTStrategy(secret=SECRET, lifetime_seconds=3600) | |
| auth_backend = AuthenticationBackend( | |
| name="jwt", | |
| transport=bearer_transport, | |
| get_strategy=get_jwt_strategy, | |
| ) | |
| fastapi_users = FastAPIUsers[User, uuid.UUID](get_user_manager, [auth_backend]) # type: ignore[arg-type] | |
| current_active_user = fastapi_users.current_user(active=True) |