Skip to content

Commit 081f718

Browse files
committed
add all routes user
1 parent edf43d4 commit 081f718

5 files changed

Lines changed: 50 additions & 15 deletions

File tree

api_v1/auth/backends.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,9 @@
77
from 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

1315
def get_jwt_strategy() -> JWTStrategy:

api_v1/auth/views.py

Lines changed: 30 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,36 @@
11
from 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+
)

api_v1/users/middlewares.py

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,8 @@
11
from typing import Any
2-
from fastapi import Request, Depends
3-
from fastapi_users.db import SQLAlchemyUserDatabase
2+
from fastapi import Request
43
from 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

128
class 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)

api_v1/users/user_manager.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,12 @@
1+
from fastapi import Depends
12
from fastapi_users import BaseUserManager, IntegerIDMixin
3+
from fastapi_users.db import SQLAlchemyUserDatabase
4+
from sqlalchemy.ext.asyncio import AsyncSession
25

36
from .mixins import AuthenticationUserManagerMixin, PasswordValidationMixin
47
from config.models import User
58
from config import settings
9+
from config import db_connection
610

711

812
class 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+
))

config/config.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff 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

2425
class AlembicSettings(BaseModel):

0 commit comments

Comments
 (0)