Skip to content

Commit

Permalink
Update create new token function return type (#369)
Browse files Browse the repository at this point in the history
* Update create new token function return type

* update args input
  • Loading branch information
wu-clan authored Jul 27, 2024
1 parent 7287093 commit c9be643
Show file tree
Hide file tree
Showing 4 changed files with 33 additions and 20 deletions.
9 changes: 3 additions & 6 deletions backend/app/admin/schema/token.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,14 +18,11 @@ class AccessTokenBase(SchemaBase):
access_token_expire_time: datetime


class GetLoginToken(AccessTokenBase):
class GetNewToken(AccessTokenBase):
refresh_token: str
refresh_token_type: str = 'Bearer'
refresh_token_expire_time: datetime
user: GetUserInfoNoRelationDetail


class GetNewToken(AccessTokenBase):
refresh_token: str
refresh_token_type: str = 'Bearer'
refresh_token_expire_time: datetime
class GetLoginToken(GetNewToken):
user: GetUserInfoNoRelationDetail
24 changes: 12 additions & 12 deletions backend/app/admin/service/auth_service.py
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,9 @@ async def login(*, request: Request, obj: AuthLoginParam, background_tasks: Back
str(current_user.id), multi_login=current_user.is_multi_login
)
refresh_token, refresh_token_expire_time = await create_refresh_token(
str(current_user.id), access_token_expire_time, multi_login=current_user.is_multi_login
sub=str(current_user.id),
expire_time=access_token_expire_time,
multi_login=current_user.is_multi_login,
)
await user_dao.update_login_time(db, obj.username)
await db.refresh(current_user)
Expand Down Expand Up @@ -113,19 +115,17 @@ async def new_token(*, request: Request, refresh_token: str) -> GetNewToken:
elif not current_user.status:
raise errors.AuthorizationError(msg='用户已锁定,操作失败')
current_token = await get_token(request)
(
new_access_token,
new_refresh_token,
new_access_token_expire_time,
new_refresh_token_expire_time,
) = await create_new_token(
str(current_user.id), current_token, refresh_token, multi_login=current_user.is_multi_login
new_token = await create_new_token(
sub=str(current_user.id),
token=current_token,
refresh_token=refresh_token,
multi_login=current_user.is_multi_login,
)
data = GetNewToken(
access_token=new_access_token,
access_token_expire_time=new_access_token_expire_time,
refresh_token=new_refresh_token,
refresh_token_expire_time=new_refresh_token_expire_time,
access_token=new_token.new_access_token,
access_token_expire_time=new_token.new_access_token_expire_time,
refresh_token=new_token.new_refresh_token,
refresh_token_expire_time=new_token.new_refresh_token_expire_time,
)
return data

Expand Down
10 changes: 10 additions & 0 deletions backend/common/dataclasses.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@
# -*- coding: utf-8 -*-
import dataclasses

from datetime import datetime

from fastapi import Response

from backend.common.enums import StatusType
Expand Down Expand Up @@ -30,3 +32,11 @@ class RequestCallNextReturn:
status: StatusType
err: Exception | None
response: Response


@dataclasses.dataclass
class NewTokenReturn:
new_access_token: str
new_refresh_token: str
new_access_token_expire_time: datetime
new_refresh_token_expire_time: datetime
10 changes: 8 additions & 2 deletions backend/common/security/jwt.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
from sqlalchemy.ext.asyncio import AsyncSession

from backend.app.admin.model import User
from backend.common.dataclasses import NewTokenReturn
from backend.common.exception.errors import AuthorizationError, TokenError
from backend.core.conf import settings
from backend.database.db_redis import redis_client
Expand Down Expand Up @@ -100,7 +101,7 @@ async def create_refresh_token(sub: str, expire_time: datetime | None = None, **
return refresh_token, expire


async def create_new_token(sub: str, token: str, refresh_token: str, **kwargs) -> tuple[str, str, datetime, datetime]:
async def create_new_token(sub: str, token: str, refresh_token: str, **kwargs) -> NewTokenReturn:
"""
Generate new token
Expand All @@ -118,7 +119,12 @@ async def create_new_token(sub: str, token: str, refresh_token: str, **kwargs) -
refresh_token_key = f'{settings.TOKEN_REDIS_PREFIX}:{sub}:{refresh_token}'
await redis_client.delete(token_key)
await redis_client.delete(refresh_token_key)
return new_access_token, new_refresh_token, new_access_token_expire_time, new_refresh_token_expire_time
return NewTokenReturn(
new_access_token=new_access_token,
new_refresh_token=new_refresh_token,
new_access_token_expire_time=new_access_token_expire_time,
new_refresh_token_expire_time=new_refresh_token_expire_time,
)


@sync_to_async
Expand Down

0 comments on commit c9be643

Please sign in to comment.