Skip to content

Commit 440f324

Browse files
authored
Update the logic for create new token (#516)
1 parent 5e7a4e1 commit 440f324

File tree

4 files changed

+8
-34
lines changed

4 files changed

+8
-34
lines changed

backend/app/admin/api/v1/auth/auth.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,9 +35,9 @@ async def user_login(
3535
return response_base.success(data=data)
3636

3737

38-
@router.post('/token/new', summary='创建新 token', dependencies=[DependsJwtAuth])
38+
@router.post('/token/new', summary='创建新 token')
3939
async def create_new_token(request: Request, response: Response) -> ResponseSchemaModel[GetNewToken]:
40-
data = await auth_service.new_token(request=request, response=response)
40+
data = await auth_service.new_token(request=request)
4141
return response_base.success(data=data)
4242

4343

backend/app/admin/service/auth_service.py

Lines changed: 2 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -132,26 +132,22 @@ async def login(
132132
return data
133133

134134
@staticmethod
135-
async def new_token(*, request: Request, response: Response) -> GetNewToken:
135+
async def new_token(*, request: Request) -> GetNewToken:
136136
refresh_token = request.cookies.get(settings.COOKIE_REFRESH_TOKEN_KEY)
137137
if not refresh_token:
138-
raise errors.TokenError(msg='Refresh Token 丢失,请重新登录')
138+
raise errors.TokenError(msg='Refresh Token 已过期,请重新登录')
139139
try:
140140
user_id = jwt_decode(refresh_token).id
141141
except Exception:
142142
raise errors.TokenError(msg='Refresh Token 无效')
143-
if request.user.id != user_id:
144-
raise errors.TokenError(msg='Refresh Token 无效')
145143
async with async_db_session() as db:
146-
token = get_token(request)
147144
user = await user_dao.get(db, user_id)
148145
if not user:
149146
raise errors.NotFoundError(msg='用户名或密码有误')
150147
elif not user.status:
151148
raise errors.AuthorizationError(msg='用户已被锁定, 请联系统管理员')
152149
new_token = await create_new_token(
153150
user_id=str(user.id),
154-
token=token,
155151
refresh_token=refresh_token,
156152
multi_login=user.is_multi_login,
157153
# extra info
@@ -163,13 +159,6 @@ async def new_token(*, request: Request, response: Response) -> GetNewToken:
163159
browser=request.state.browser,
164160
device_type=request.state.device,
165161
)
166-
response.set_cookie(
167-
key=settings.COOKIE_REFRESH_TOKEN_KEY,
168-
value=new_token.new_refresh_token,
169-
max_age=settings.COOKIE_REFRESH_TOKEN_EXPIRE_SECONDS,
170-
expires=timezone.f_utc(new_token.new_refresh_token_expire_time),
171-
httponly=True,
172-
)
173162
data = GetNewToken(
174163
access_token=new_token.new_access_token,
175164
access_token_expire_time=new_token.new_access_token_expire_time,

backend/common/dataclasses.py

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,8 +38,6 @@ class RequestCallNext:
3838
class NewToken:
3939
new_access_token: str
4040
new_access_token_expire_time: datetime
41-
new_refresh_token: str
42-
new_refresh_token_expire_time: datetime
4341
session_uuid: str
4442

4543

backend/common/security/jwt.py

Lines changed: 4 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -116,36 +116,23 @@ async def create_refresh_token(user_id: str, multi_login: bool) -> RefreshToken:
116116
return RefreshToken(refresh_token=refresh_token, refresh_token_expire_time=expire)
117117

118118

119-
async def create_new_token(user_id: str, token: str, refresh_token: str, multi_login: bool, **kwargs) -> NewToken:
119+
async def create_new_token(user_id: str, refresh_token: str, multi_login: bool, **kwargs) -> NewToken:
120120
"""
121121
Generate new token
122122
123123
:param user_id:
124-
:param token
125124
:param refresh_token:
126125
:param multi_login:
127126
:param kwargs: Access token extra information
128127
:return:
129128
"""
130129
redis_refresh_token = await redis_client.get(f'{settings.TOKEN_REFRESH_REDIS_PREFIX}:{user_id}:{refresh_token}')
131130
if not redis_refresh_token or redis_refresh_token != refresh_token:
132-
raise TokenError(msg='Refresh Token 已过期')
133-
134-
token_payload = jwt_decode(token)
131+
raise TokenError(msg='Refresh Token 已过期,请重新登录')
135132
new_access_token = await create_access_token(user_id, multi_login, **kwargs)
136-
new_refresh_token = await create_refresh_token(user_id, multi_login)
137-
keys = [
138-
f'{settings.TOKEN_REDIS_PREFIX}:{user_id}:{token_payload.session_uuid}',
139-
f'{settings.TOKEN_REFRESH_REDIS_PREFIX}:{user_id}:{refresh_token}',
140-
]
141-
for key in keys:
142-
await redis_client.delete(key)
143-
144133
return NewToken(
145134
new_access_token=new_access_token.access_token,
146135
new_access_token_expire_time=new_access_token.access_token_expire_time,
147-
new_refresh_token=new_refresh_token.refresh_token,
148-
new_refresh_token_expire_time=new_refresh_token.refresh_token_expire_time,
149136
session_uuid=new_access_token.session_uuid,
150137
)
151138

@@ -233,8 +220,8 @@ async def jwt_authentication(token: str) -> CurrentUserIns:
233220
"""
234221
token_payload = jwt_decode(token)
235222
user_id = token_payload.id
236-
token_verify = await redis_client.get(f'{settings.TOKEN_REDIS_PREFIX}:{user_id}:{token_payload.session_uuid}')
237-
if not token_verify:
223+
redis_token = await redis_client.get(f'{settings.TOKEN_REDIS_PREFIX}:{user_id}:{token_payload.session_uuid}')
224+
if not redis_token or token != redis_token:
238225
raise TokenError(msg='Token 已过期')
239226
cache_user = await redis_client.get(f'{settings.JWT_USER_REDIS_PREFIX}:{user_id}')
240227
if not cache_user:

0 commit comments

Comments
 (0)