Update the OAuth2 module to plugin (#620)

* Update the OAuth2 module to plugin

* update create user social param
This commit is contained in:
Wu Clan
2025-05-22 14:36:23 +08:00
committed by GitHub
parent 9b0d9f8296
commit bcc764142b
29 changed files with 83 additions and 81 deletions
-2
View File
@@ -5,14 +5,12 @@ from fastapi import APIRouter
from backend.app.admin.api.v1.auth import router as auth_router
from backend.app.admin.api.v1.log import router as log_router
from backend.app.admin.api.v1.monitor import router as monitor_router
from backend.app.admin.api.v1.oauth2 import router as oauth2_router
from backend.app.admin.api.v1.sys import router as sys_router
from backend.core.conf import settings
v1 = APIRouter(prefix=settings.FASTAPI_API_V1_PATH)
v1.include_router(auth_router)
v1.include_router(oauth2_router)
v1.include_router(sys_router)
v1.include_router(log_router)
v1.include_router(monitor_router)
@@ -1,11 +0,0 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
from fastapi import APIRouter
from backend.app.admin.api.v1.oauth2.github import router as github_router
from backend.app.admin.api.v1.oauth2.linux_do import router as linux_do_router
router = APIRouter(prefix='/oauth2')
router.include_router(github_router, prefix='/github', tags=['GitHub OAuth2'])
router.include_router(linux_do_router, prefix='/linux-do', tags=['LinuxDo OAuth2'])
-47
View File
@@ -1,47 +0,0 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
from fastapi import APIRouter, BackgroundTasks, Depends, Request, Response
from fastapi_limiter.depends import RateLimiter
from fastapi_oauth20 import FastAPIOAuth20, GitHubOAuth20
from starlette.responses import RedirectResponse
from backend.app.admin.service.oauth2_service import oauth2_service
from backend.common.enums import UserSocialType
from backend.common.response.response_schema import ResponseSchemaModel, response_base
from backend.core.conf import settings
router = APIRouter()
_github_client = GitHubOAuth20(settings.OAUTH2_GITHUB_CLIENT_ID, settings.OAUTH2_GITHUB_CLIENT_SECRET)
_github_oauth2 = FastAPIOAuth20(_github_client, redirect_route_name='github_login')
@router.get('', summary='获取 Github 授权链接')
async def github_oauth2(request: Request) -> ResponseSchemaModel[str]:
auth_url = await _github_client.get_authorization_url(redirect_uri=f'{request.url}/callback')
return response_base.success(data=auth_url)
@router.get(
'/callback',
summary='Github 授权自动重定向',
description='Github 授权后,自动重定向到当前地址并获取用户信息,通过用户信息自动创建系统用户',
dependencies=[Depends(RateLimiter(times=5, minutes=1))],
)
async def github_login(
request: Request,
response: Response,
background_tasks: BackgroundTasks,
oauth2: FastAPIOAuth20 = Depends(_github_oauth2),
):
token, _state = oauth2
access_token = token['access_token']
user = await _github_client.get_userinfo(access_token)
data = await oauth2_service.create_with_login(
request=request,
response=response,
background_tasks=background_tasks,
user=user,
social=UserSocialType.github,
)
return RedirectResponse(url=f'{settings.OAUTH2_FRONTEND_REDIRECT_URI}?access_token={data.access_token}')
@@ -1,50 +0,0 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
from fastapi import APIRouter, BackgroundTasks, Depends, Request, Response
from fastapi_limiter.depends import RateLimiter
from fastapi_oauth20 import FastAPIOAuth20, LinuxDoOAuth20
from starlette.responses import RedirectResponse
from backend.app.admin.service.oauth2_service import oauth2_service
from backend.common.enums import UserSocialType
from backend.common.response.response_schema import ResponseSchemaModel, response_base
from backend.core.conf import settings
router = APIRouter()
_linux_do_client = LinuxDoOAuth20(
settings.OAUTH2_LINUX_DO_CLIENT_ID,
settings.OAUTH2_LINUX_DO_CLIENT_SECRET,
)
_linux_do_oauth2 = FastAPIOAuth20(_linux_do_client, redirect_route_name='linux_do_login')
@router.get('', summary='获取 LinuxDo 授权链接')
async def linux_do_oauth2(request: Request) -> ResponseSchemaModel[str]:
auth_url = await _linux_do_client.get_authorization_url(redirect_uri=f'{request.url}/callback')
return response_base.success(data=auth_url)
@router.get(
'/callback',
summary='LinuxDo 授权自动重定向',
description='LinuxDo 授权后,自动重定向到当前地址并获取用户信息,通过用户信息自动创建系统用户',
dependencies=[Depends(RateLimiter(times=5, minutes=1))],
)
async def linux_do_login(
request: Request,
response: Response,
background_tasks: BackgroundTasks,
oauth2: FastAPIOAuth20 = Depends(_linux_do_oauth2),
):
token, _state = oauth2
access_token = token['access_token']
user = await _linux_do_client.get_userinfo(access_token)
data = await oauth2_service.create_with_login(
request=request,
response=response,
background_tasks=background_tasks,
user=user,
social=UserSocialType.linux_do,
)
return RedirectResponse(url=f'{settings.OAUTH2_FRONTEND_REDIRECT_URI}?access_token={data.access_token}')