mirror of
https://github.com/fastapiadmin/FastapiAdmin.git
synced 2026-09-21 12:52:26 +00:00
refactor: 重构Redis依赖注入以提升代码可维护性
将Redis依赖从Request对象中解耦,改为通过Depends注入,提高代码的可测试性和可维护性
This commit is contained in:
@@ -5,6 +5,7 @@ from typing import Union, Dict
|
||||
from fastapi import APIRouter, Depends, Request, BackgroundTasks, WebSocket
|
||||
from fastapi.responses import JSONResponse, StreamingResponse
|
||||
from sqlalchemy.ext.asyncio import AsyncSession
|
||||
from aioredis import Redis
|
||||
|
||||
from app.config.setting import settings
|
||||
from app.common.response import ErrorResponse, SuccessResponse
|
||||
@@ -20,7 +21,8 @@ from app.api.v1.schemas.system.auth_schema import (
|
||||
)
|
||||
from app.core.dependencies import (
|
||||
db_getter,
|
||||
get_current_user
|
||||
get_current_user,
|
||||
redis_getter
|
||||
)
|
||||
from app.core.router_class import OperationLogRoute
|
||||
from app.core.security import CustomOAuth2PasswordRequestForm
|
||||
@@ -33,11 +35,12 @@ router = APIRouter(route_class=OperationLogRoute)
|
||||
@router.post("/login", summary="登录", description="登录", response_model=JWTOutSchema)
|
||||
async def login_for_access_token_controller(
|
||||
request: Request,
|
||||
redis: Redis = Depends(redis_getter),
|
||||
login_form: CustomOAuth2PasswordRequestForm = Depends(),
|
||||
db: AsyncSession = Depends(db_getter),
|
||||
) -> Union[JSONResponse, Dict]:
|
||||
user = await LoginService.authenticate_user_service(request=request, login_form=login_form, db=db)
|
||||
login_token = await LoginService.create_token_service(request=request, username=user.username)
|
||||
user = await LoginService.authenticate_user_service(request=request, redis=redis, login_form=login_form, db=db)
|
||||
login_token = await LoginService.create_token_service(redis=redis, username=user.username)
|
||||
logger.info(f"用户{user.username}登录成功")
|
||||
|
||||
# 如果是文档请求,则不记录日志:http://localhost:8000/api/v1/docs
|
||||
@@ -48,11 +51,11 @@ async def login_for_access_token_controller(
|
||||
|
||||
@router.post("/token/refresh", summary="刷新token", description="刷新token", response_model=JWTOutSchema, dependencies=[Depends(get_current_user)])
|
||||
async def get_new_token_controller(
|
||||
request: Request,
|
||||
payload: RefreshTokenPayloadSchema
|
||||
payload: RefreshTokenPayloadSchema,
|
||||
redis: Redis = Depends(redis_getter)
|
||||
) -> JSONResponse:
|
||||
# 解析当前的访问Token以获取用户名
|
||||
new_token = await LoginService.refresh_token_service(request=request, refresh_token=payload)
|
||||
new_token = await LoginService.refresh_token_service(redis=redis, refresh_token=payload)
|
||||
token_dict = new_token.model_dump()
|
||||
logger.info(f"刷新token成功: {token_dict}")
|
||||
return SuccessResponse(data=token_dict, msg="刷新成功")
|
||||
@@ -60,20 +63,20 @@ async def get_new_token_controller(
|
||||
|
||||
@router.post("/captcha/get", summary="获取验证码", description="获取登录验证码", response_model=CaptchaOutSchema)
|
||||
async def get_captcha_for_login_controller(
|
||||
request: Request
|
||||
redis: Redis = Depends(redis_getter)
|
||||
) -> JSONResponse:
|
||||
# 获取验证码
|
||||
captcha = await CaptchaService.get_captcha_service(request=request)
|
||||
captcha = await CaptchaService.get_captcha_service(redis=redis)
|
||||
logger.info(f"获取验证码成功")
|
||||
return SuccessResponse(data=captcha, msg="获取验证码成功")
|
||||
|
||||
|
||||
@router.post('/logout', summary="退出登录", description="退出登录", dependencies=[Depends(get_current_user)])
|
||||
async def logout_controller(
|
||||
request: Request,
|
||||
payload: LogoutPayloadSchema
|
||||
payload: LogoutPayloadSchema,
|
||||
redis: Redis = Depends(redis_getter)
|
||||
) -> JSONResponse:
|
||||
if await LoginService.logout_services_service(request=request, token=payload):
|
||||
if await LoginService.logout_services_service(redis=redis, token=payload):
|
||||
logger.info('退出成功')
|
||||
return SuccessResponse(msg='退出成功')
|
||||
return ErrorResponse(msg='退出失败')
|
||||
|
||||
Reference in New Issue
Block a user