feat: 用户登录注册相关接口调整,登录成功之后返回access_token以及refresh_token

This commit is contained in:
martsforever
2025-08-22 15:17:51 +08:00
parent 78ff288758
commit 77162e1f0a
2 changed files with 45 additions and 19 deletions
+24 -10
View File
@@ -1,4 +1,5 @@
from datetime import timedelta, datetime, timezone
from typing import TypedDict, Literal, TypeAlias
import jwt
from passlib.context import CryptContext
@@ -7,6 +8,17 @@ from app.config.env import env
pwd_context = CryptContext(schemes=["bcrypt"], deprecated="auto")
# token的类型,access用于接口认证,refresh用于刷新access token,verify用于激活用户账号
AccessTokenType: TypeAlias = Literal["access", "refresh", "verify"]
class TokenInfo(TypedDict):
# 用户名信息
username: str
# token过期时间
exp: datetime
type: AccessTokenType
class CryptUtils:
@staticmethod
@@ -18,17 +30,19 @@ class CryptUtils:
return pwd_context.verify(plain_password, hashed_password)
@staticmethod
def create_access_token(username: str, expires_delta: timedelta | None = None):
data: dict = {"sub": username}
if expires_delta:
expire = datetime.now(timezone.utc) + expires_delta
else:
expire = datetime.now(timezone.utc) + timedelta(minutes=env.jwt_access_token_expire_minutes)
data.update({'exp': expire})
def create_token(
username: str,
type: AccessTokenType,
expires_delta: timedelta
):
data: TokenInfo = {
"username": username,
"type": type,
"exp": datetime.now(timezone.utc) + expires_delta
}
return jwt.encode(data, env.jwt_secret_key, env.jwt_algorithm)
@staticmethod
def get_username_from_token(token: str):
def get_token_info(token: str) -> TokenInfo:
data = jwt.decode(token, env.jwt_secret_key, algorithms=[env.jwt_algorithm])
username = data.get("sub")
return username
return data