File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change 77from config import settings
88
99
10- bearer_transport = BearerTransport ()
10+ bearer_transport = BearerTransport (settings .API_PREFIX +
11+ settings .JWT .JWT_PATH +
12+ '/login' )
1113
1214
1315def get_jwt_strategy () -> JWTStrategy :
Original file line number Diff line number Diff line change 11from fastapi import APIRouter
2+ from fastapi_users import FastAPIUsers
23
4+ from config .models import User
5+ from config import settings
6+ from .backends import auth_backend
7+ from .schemas import UserRead , UserCreate , UserUpdate
8+ from api_v1 .users .user_manager import get_user_manager
39
4- router = APIRouter (prefix = '/auth' ,
5- tags = ['Auth' ],
6- )
710
11+ fastapi_users = FastAPIUsers [User , int ](
12+ get_user_manager ,
13+ (auth_backend ,)
14+ )
815
916
10- @router .post (path = '/login' ,
11- )
17+ router = APIRouter (tags = ['Auth' ],
18+ )
19+ router .include_router (fastapi_users .get_auth_router (auth_backend ),
20+ prefix = settings .JWT .JWT_PATH ,
21+ )
22+ router .include_router (fastapi_users .get_register_router (UserRead , UserCreate ),
23+ prefix = '/auth' ,
24+ )
25+ router .include_router (fastapi_users .get_verify_router (UserRead ),
26+ prefix = '/auth' ,
27+ )
28+ router .include_router (fastapi_users .get_reset_password_router (),
29+ prefix = '/auth' ,
30+ )
31+ router .include_router (fastapi_users .get_reset_password_router (),
32+ prefix = '/auth' ,
33+ )
34+ router .include_router (fastapi_users .get_users_router (UserRead , UserUpdate ),
35+ prefix = '/auth' ,
36+ )
Original file line number Diff line number Diff line change 11from typing import Any
2- from fastapi import Request , Depends
3- from fastapi_users .db import SQLAlchemyUserDatabase
2+ from fastapi import Request
43from starlette .middleware .base import BaseHTTPMiddleware
5- from sqlalchemy .ext .asyncio import AsyncSession
64
7- from .user_manager import UserManager
8- from config .models import User
9- from config import db_connection
5+ from .user_manager import get_user_manager
106
117
128class AuthenticationMiddleware (BaseHTTPMiddleware ):
@@ -20,11 +16,9 @@ async def dispatch(
2016 self ,
2117 request : Request ,
2218 call_next : Any ,
23- session : AsyncSession = Depends (db_connection .session_geter ),
2419 ):
2520 token = request .headers .get ('Authorization' )
26- user_db = SQLAlchemyUserDatabase (session , User )
27- manager = UserManager (user_db = user_db )
21+ manager = await get_user_manager ()
2822 user = await manager .authenticate_user (token )
2923 request .scope ['user' ] = user
3024 response = await call_next (request )
Original file line number Diff line number Diff line change 1+ from fastapi import Depends
12from fastapi_users import BaseUserManager , IntegerIDMixin
3+ from fastapi_users .db import SQLAlchemyUserDatabase
4+ from sqlalchemy .ext .asyncio import AsyncSession
25
36from .mixins import AuthenticationUserManagerMixin , PasswordValidationMixin
47from config .models import User
58from config import settings
9+ from config import db_connection
610
711
812class UserManager (AuthenticationUserManagerMixin ,
@@ -15,3 +19,12 @@ class UserManager(AuthenticationUserManagerMixin,
1519
1620 verification_token_secret = settings .JWT .SECRET
1721 reset_password_token_lifetime_seconds = settings .JWT .RESET_LIFESPAN_TOKEN_SECONDS
22+
23+
24+ async def get_user_manager (session : AsyncSession = Depends (
25+ db_connection .session_geter ,
26+ )) -> UserManager :
27+ return UserManager (user_db = SQLAlchemyUserDatabase (
28+ session = session ,
29+ user_table = User ,
30+ ))
Original file line number Diff line number Diff line change @@ -19,6 +19,7 @@ class JWTSettings(BaseModel):
1919 NAME : str = 'jwt'
2020 SECRET : str = config ('SECRET' )
2121 RESET_LIFESPAN_TOKEN_SECONDS : int = 3600
22+ JWT_PATH : str = '/auth/jwt'
2223
2324
2425class AlembicSettings (BaseModel ):
You can’t perform that action at this time.
0 commit comments