Skip to content

Commit 26e7414

Browse files
author
JiayuXu
committed
refactor: 精简 JWT 载荷字段
1 parent 9c6077b commit 26e7414

7 files changed

Lines changed: 17 additions & 75 deletions

File tree

src/api/v1/base/base.py

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -79,9 +79,7 @@ async def login_access_token(request: Request, credentials: CredentialsSchema):
7979
await user_repository.update_last_login(user.id)
8080

8181
# 创建访问令牌和刷新令牌
82-
access_token, refresh_token = create_token_pair(
83-
user_id=user.id, username=user.username, is_superuser=user.is_superuser
84-
)
82+
access_token, refresh_token = create_token_pair(user_id=user.id)
8583

8684
data = JWTOut(
8785
access_token=access_token,
@@ -108,9 +106,7 @@ async def refresh_access_token(request: Request, refresh_request: RefreshTokenRe
108106
return Fail(code=401, msg="用户不存在或已被禁用")
109107

110108
# 创建新的令牌对
111-
access_token, refresh_token = create_token_pair(
112-
user_id=user.id, username=user.username, is_superuser=user.is_superuser
113-
)
109+
access_token, refresh_token = create_token_pair(user_id=user.id)
114110

115111
data = TokenRefreshOut(
116112
access_token=access_token,

src/schemas/login.py

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,6 @@ class JWTOut(BaseModel):
1818

1919
class JWTPayload(BaseModel):
2020
user_id: int
21-
username: str
22-
is_superuser: bool
2321
exp: datetime
2422
token_type: str = "access" # access 或 refresh
2523

src/utils/jwt.py

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -17,14 +17,12 @@ def create_access_token(*, data: JWTPayload):
1717
return encoded_jwt
1818

1919

20-
def create_refresh_token(user_id: int, username: str, is_superuser: bool) -> str:
20+
def create_refresh_token(user_id: int) -> str:
2121
"""创建刷新令牌"""
2222
expire = datetime.now(UTC) + timedelta(days=settings.JWT_REFRESH_TOKEN_EXPIRE_DAYS)
2323

2424
payload = JWTPayload(
2525
user_id=user_id,
26-
username=username,
27-
is_superuser=is_superuser,
2826
exp=expire,
2927
token_type="refresh",
3028
)
@@ -57,24 +55,20 @@ def verify_token(token: str, token_type: str = "access") -> JWTPayload:
5755
raise jwt.InvalidTokenError("Invalid token") from e
5856

5957

60-
def create_token_pair(
61-
user_id: int, username: str, is_superuser: bool
62-
) -> tuple[str, str]:
58+
def create_token_pair(user_id: int) -> tuple[str, str]:
6359
"""创建访问令牌和刷新令牌对"""
6460
# 创建访问令牌
6561
access_expire = datetime.now(UTC) + timedelta(
6662
minutes=settings.JWT_ACCESS_TOKEN_EXPIRE_MINUTES
6763
)
6864
access_payload = JWTPayload(
6965
user_id=user_id,
70-
username=username,
71-
is_superuser=is_superuser,
7266
exp=access_expire,
7367
token_type="access",
7468
)
7569
access_token = create_access_token(data=access_payload)
7670

7771
# 创建刷新令牌
78-
refresh_token = create_refresh_token(user_id, username, is_superuser)
72+
refresh_token = create_refresh_token(user_id)
7973

8074
return access_token, refresh_token

tests/conftest_simple.py

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -65,9 +65,7 @@ def sample_jwt_token():
6565
"""样例JWT令牌"""
6666
from utils.jwt import create_token_pair
6767

68-
access_token, refresh_token = create_token_pair(
69-
user_id=1, username="test_user", is_superuser=True
70-
)
68+
access_token, refresh_token = create_token_pair(user_id=1)
7169

7270
return {
7371
"access_token": access_token,

tests/test_core_functionality.py

Lines changed: 2 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -19,25 +19,21 @@ class TestJWTCore:
1919
def test_token_creation_and_verification(self):
2020
"""测试令牌创建和验证"""
2121
# 创建令牌对
22-
access_token, refresh_token = create_token_pair(
23-
user_id=1, username="test_user", is_superuser=False
24-
)
22+
access_token, refresh_token = create_token_pair(user_id=1)
2523

2624
# 验证访问令牌
2725
access_payload = verify_token(access_token, "access")
2826
assert access_payload.user_id == 1
29-
assert access_payload.username == "test_user"
3027
assert access_payload.token_type == "access"
3128

3229
# 验证刷新令牌
3330
refresh_payload = verify_token(refresh_token, "refresh")
3431
assert refresh_payload.user_id == 1
35-
assert refresh_payload.username == "test_user"
3632
assert refresh_payload.token_type == "refresh"
3733

3834
def test_token_type_security(self):
3935
"""测试令牌类型安全"""
40-
access_token, refresh_token = create_token_pair(1, "test", False)
36+
access_token, refresh_token = create_token_pair(1)
4137

4238
# 用错误类型验证应该失败
4339
with pytest.raises(Exception): # noqa: B017
@@ -53,8 +49,6 @@ def test_expired_token_rejection(self):
5349
# 创建过期令牌
5450
expired_payload = JWTPayload(
5551
user_id=1,
56-
username="test",
57-
is_superuser=False,
5852
exp=datetime.now(UTC) - timedelta(minutes=1),
5953
token_type="access",
6054
)
@@ -80,15 +74,11 @@ def test_jwt_payload_validation(self):
8074
"""测试JWT载荷验证"""
8175
payload = JWTPayload(
8276
user_id=123,
83-
username="test_user",
84-
is_superuser=True,
8577
exp=datetime.now(UTC) + timedelta(hours=1),
8678
token_type="access",
8779
)
8880

8981
assert payload.user_id == 123
90-
assert payload.username == "test_user"
91-
assert payload.is_superuser is True
9282
assert payload.token_type == "access"
9383

9484

tests/test_jwt_auth.py

Lines changed: 5 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -14,12 +14,8 @@ class TestJWTAuthentication:
1414
def test_create_token_pair(self):
1515
"""测试创建Token对"""
1616
user_id = 1
17-
username = "test_user"
18-
is_superuser = False
1917

20-
access_token, refresh_token = create_token_pair(
21-
user_id=user_id, username=username, is_superuser=is_superuser
22-
)
18+
access_token, refresh_token = create_token_pair(user_id=user_id)
2319

2420
assert isinstance(access_token, str)
2521
assert isinstance(refresh_token, str)
@@ -30,42 +26,32 @@ def test_create_token_pair(self):
3026
def test_verify_access_token(self):
3127
"""测试验证访问令牌"""
3228
user_id = 1
33-
username = "test_user"
34-
is_superuser = True
3529

36-
access_token, _ = create_token_pair(user_id, username, is_superuser)
30+
access_token, _ = create_token_pair(user_id)
3731

3832
# 验证访问令牌
3933
payload = verify_token(access_token, token_type="access")
4034

4135
assert payload.user_id == user_id
42-
assert payload.username == username
43-
assert payload.is_superuser == is_superuser
4436
assert payload.token_type == "access"
4537

4638
def test_verify_refresh_token(self):
4739
"""测试验证刷新令牌"""
4840
user_id = 2
49-
username = "refresh_user"
50-
is_superuser = False
5141

52-
_, refresh_token = create_token_pair(user_id, username, is_superuser)
42+
_, refresh_token = create_token_pair(user_id)
5343

5444
# 验证刷新令牌
5545
payload = verify_token(refresh_token, token_type="refresh")
5646

5747
assert payload.user_id == user_id
58-
assert payload.username == username
59-
assert payload.is_superuser == is_superuser
6048
assert payload.token_type == "refresh"
6149

6250
def test_token_type_validation(self):
6351
"""测试令牌类型验证"""
6452
user_id = 3
65-
username = "type_test_user"
66-
is_superuser = False
6753

68-
access_token, refresh_token = create_token_pair(user_id, username, is_superuser)
54+
access_token, refresh_token = create_token_pair(user_id)
6955

7056
# 用访问令牌验证刷新令牌类型应该失败
7157
with pytest.raises(Exception): # noqa: B017
@@ -82,8 +68,6 @@ def test_expired_token(self):
8268

8369
payload = JWTPayload(
8470
user_id=4,
85-
username="expired_user",
86-
is_superuser=False,
8771
exp=expire,
8872
token_type="access",
8973
)
@@ -104,10 +88,8 @@ def test_invalid_token(self):
10488
def test_token_expiration_times(self):
10589
"""测试令牌过期时间设置"""
10690
user_id = 5
107-
username = "expiry_test_user"
108-
is_superuser = False
10991

110-
access_token, refresh_token = create_token_pair(user_id, username, is_superuser)
92+
access_token, refresh_token = create_token_pair(user_id)
11193

11294
access_payload = verify_token(access_token, token_type="access")
11395
refresh_payload = verify_token(refresh_token, token_type="refresh")

tests/test_simple_jwt.py

Lines changed: 4 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -19,12 +19,8 @@ class TestSimpleJWT:
1919
def test_create_token_pair(self):
2020
"""测试创建Token对"""
2121
user_id = 1
22-
username = "test_user"
23-
is_superuser = False
2422

25-
access_token, refresh_token = create_token_pair(
26-
user_id=user_id, username=username, is_superuser=is_superuser
27-
)
23+
access_token, refresh_token = create_token_pair(user_id=user_id)
2824

2925
assert isinstance(access_token, str)
3026
assert isinstance(refresh_token, str)
@@ -35,42 +31,32 @@ def test_create_token_pair(self):
3531
def test_verify_access_token(self):
3632
"""测试验证访问令牌"""
3733
user_id = 1
38-
username = "test_user"
39-
is_superuser = True
4034

41-
access_token, _ = create_token_pair(user_id, username, is_superuser)
35+
access_token, _ = create_token_pair(user_id)
4236

4337
# 验证访问令牌
4438
payload = verify_token(access_token, token_type="access")
4539

4640
assert payload.user_id == user_id
47-
assert payload.username == username
48-
assert payload.is_superuser == is_superuser
4941
assert payload.token_type == "access"
5042

5143
def test_verify_refresh_token(self):
5244
"""测试验证刷新令牌"""
5345
user_id = 2
54-
username = "refresh_user"
55-
is_superuser = False
5646

57-
_, refresh_token = create_token_pair(user_id, username, is_superuser)
47+
_, refresh_token = create_token_pair(user_id)
5848

5949
# 验证刷新令牌
6050
payload = verify_token(refresh_token, token_type="refresh")
6151

6252
assert payload.user_id == user_id
63-
assert payload.username == username
64-
assert payload.is_superuser == is_superuser
6553
assert payload.token_type == "refresh"
6654

6755
def test_token_type_validation(self):
6856
"""测试令牌类型验证"""
6957
user_id = 3
70-
username = "type_test_user"
71-
is_superuser = False
7258

73-
access_token, refresh_token = create_token_pair(user_id, username, is_superuser)
59+
access_token, refresh_token = create_token_pair(user_id)
7460

7561
# 用访问令牌验证刷新令牌类型应该失败
7662
with pytest.raises(Exception): # noqa: B017
@@ -87,8 +73,6 @@ def test_expired_token(self):
8773

8874
payload = JWTPayload(
8975
user_id=4,
90-
username="expired_user",
91-
is_superuser=False,
9276
exp=expire,
9377
token_type="access",
9478
)

0 commit comments

Comments
 (0)