Skip to content

Commit 3160790

Browse files
authored
Add user social unbinding account interface (#913)
1 parent 5ae9f8b commit 3160790

File tree

4 files changed

+50
-9
lines changed

4 files changed

+50
-9
lines changed
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
from fastapi import APIRouter, Request
2+
3+
from backend.common.response.response_schema import ResponseModel, response_base
4+
from backend.common.security.jwt import DependsJwtAuth
5+
from backend.database.db import CurrentSessionTransaction
6+
from backend.plugin.oauth2.enums import UserSocialType
7+
from backend.plugin.oauth2.service.user_social import user_social_service
8+
9+
router = APIRouter()
10+
11+
12+
@router.delete('/me', summary='解绑用户社交账号', dependencies=[DependsJwtAuth])
13+
async def unbinding_user(db: CurrentSessionTransaction, request: Request, source: UserSocialType) -> ResponseModel:
14+
await user_social_service.unbinding(db=db, user_id=request.user.id, source=source)
15+
return response_base.success()

backend/plugin/oauth2/crud/crud_user_social.py

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -8,23 +8,23 @@
88
class CRUDUserSocial(CRUDPlus[UserSocial]):
99
"""用户社交账号数据库操作类"""
1010

11-
async def check_binding(self, db: AsyncSession, pk: int, source: str) -> UserSocial | None:
11+
async def check_binding(self, db: AsyncSession, user_id: int, source: str) -> UserSocial | None:
1212
"""
1313
检查系统用户社交账号绑定
1414
1515
:param db: 数据库会话
16-
:param pk: 用户 ID
16+
:param user_id: 用户 ID
1717
:param source: 社交账号类型
1818
:return:
1919
"""
20-
return await self.select_model_by_column(db, user_id=pk, source=source)
20+
return await self.select_model_by_column(db, user_id=user_id, source=source)
2121

2222
async def get_by_sid(self, db: AsyncSession, sid: str, source: str) -> UserSocial | None:
2323
"""
24-
通过 UUID 获取社交用户
24+
通过 sid 获取社交用户
2525
2626
:param db: 数据库会话
27-
:param sid: 第三方 UUID
27+
:param sid: 第三方用户唯一编码
2828
:param source: 社交账号类型
2929
:return:
3030
"""
@@ -40,15 +40,16 @@ async def create(self, db: AsyncSession, obj: CreateUserSocialParam) -> None:
4040
"""
4141
await self.create_model(db, obj)
4242

43-
async def delete(self, db: AsyncSession, social_id: int) -> int:
43+
async def delete(self, db: AsyncSession, user_id: int, source: str) -> int:
4444
"""
4545
删除用户社交账号绑定
4646
4747
:param db: 数据库会话
48-
:param social_id: 社交账号绑定 ID
48+
:param user_id: 用户 ID
49+
:param source: 社交账号类型
4950
:return:
5051
"""
51-
return await self.delete_model(db, social_id)
52+
return await self.delete_model_by_column(db, user_id=user_id, source=source)
5253

5354

5455
user_social_dao: CRUDUserSocial = CRUDUserSocial(UserSocial)

backend/plugin/oauth2/plugin.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[plugin]
22
summary = 'OAuth 2.0'
3-
version = '0.0.7'
3+
version = '0.0.8'
44
description = '通过 OAuth 2.0 的方式登录系统'
55
author = 'wu-clan'
66

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
from sqlalchemy.ext.asyncio import AsyncSession
2+
3+
from backend.common.exception import errors
4+
from backend.plugin.oauth2.crud.crud_user_social import user_social_dao
5+
from backend.plugin.oauth2.enums import UserSocialType
6+
7+
8+
class UserSocialService:
9+
@staticmethod
10+
async def unbinding(*, db: AsyncSession, user_id: int, source: UserSocialType) -> int:
11+
"""
12+
解绑用户社交账号
13+
14+
:param db: 数据库会话
15+
:param user_id: 用户 ID
16+
:param source: 解绑源
17+
:return:
18+
"""
19+
bind = user_social_dao.check_binding(db, user_id, source.value)
20+
if not bind:
21+
raise errors.NotFoundError(msg=f'用户未绑定 {source.value} 账号')
22+
return await user_social_dao.delete(db, user_id, source.value)
23+
24+
25+
user_social_service: UserSocialService = UserSocialService()

0 commit comments

Comments
 (0)