初步完成能使用refresh token访问的bug

This commit is contained in:
carry 2025-02-14 16:49:22 +08:00
parent 4ba89c8ccc
commit 375077be69
2 changed files with 10 additions and 13 deletions

View File

@ -12,6 +12,7 @@ class TokenPayload(BaseModel):
username: str
role: str
exp: int
token_type: str
class LoginRequest(BaseModel):
username: str

View File

@ -14,29 +14,24 @@ def get_current_time() -> int:
"""获取当前UTC时间戳"""
return int(time.time())
def create_token(user_id: int, username: str, role: str, expire_delta) -> str:
def create_token(user_id: int, username: str, role: str, token_type: str = "access") -> str:
"""创建JWT token"""
expire_delta = ACCESS_TOKEN_EXPIRE if token_type == "access" else REFRESH_TOKEN_EXPIRE
expire = get_current_time() + int(expire_delta.total_seconds())
to_encode = {
"id": user_id,
"username": username,
"role": role,
"exp": expire
"exp": expire,
"token_type": token_type
}
return jwt.encode(to_encode, SECRET_KEY, algorithm=ALGORITHM)
def create_access_token(user_id: int, username: str, role: str) -> str:
"""创建access token"""
return create_token(user_id, username, role, ACCESS_TOKEN_EXPIRE)
def create_refresh_token(user_id: int, username: str, role: str) -> str:
"""创建refresh token"""
return create_token(user_id, username, role, REFRESH_TOKEN_EXPIRE)
def create_tokens_response(user_id: int, username: str, role: str) -> TokenResponse:
"""创建access token和refresh token"""
access_token = create_access_token(user_id, username, role)
refresh_token = create_refresh_token(user_id, username, role)
access_token = create_token(user_id, username, role, "access")
refresh_token = create_token(user_id, username, role, "refresh")
# 获取token的过期时间
access_token_exp = get_current_time() + int(ACCESS_TOKEN_EXPIRE.total_seconds())
@ -58,7 +53,8 @@ def verify_token(token: str) -> Optional[TokenPayload]:
id=payload.get("id"),
username=payload.get("username"),
role=payload.get("role"),
exp=payload.get("exp")
exp=payload.get("exp"),
token_type=payload.get("token_type")
)
except (jwt.ExpiredSignatureError, jwt.InvalidTokenError):
return None