feat: 用户登录注册相关接口调整,登录成功之后返回access_token以及refresh_token
This commit is contained in:
@@ -84,8 +84,12 @@ def add_user_route(app: FastAPI):
|
||||
|
||||
public_user = PublicUser(**user.model_dump())
|
||||
|
||||
active_user_token = CryptUtils.create_access_token(public_user.username, expires_delta=timedelta(days=365 * 3))
|
||||
active_url = f"{env.server_domain}:{env.server_port}/verify?token={active_user_token}"
|
||||
verify_user_token = CryptUtils.create_token(
|
||||
username=public_user.username,
|
||||
type="verify",
|
||||
expires_delta=timedelta(days=365 * 3),
|
||||
)
|
||||
active_url = f"{env.server_domain}:{env.server_port}/verify?token={verify_user_token}"
|
||||
|
||||
return {
|
||||
"result": public_user,
|
||||
@@ -95,9 +99,10 @@ def add_user_route(app: FastAPI):
|
||||
# 验证用户账号接口
|
||||
@app.get("/verify")
|
||||
async def _verify(token: str, session: AsyncSessionDep):
|
||||
username = CryptUtils.get_username_from_token(token)
|
||||
token_info = CryptUtils.get_token_info(token)
|
||||
username = token_info.get('username')
|
||||
|
||||
if not username:
|
||||
if not username or token_info.get('type') != 'verify':
|
||||
return {"result": None, "error": "token无效或者已经过期"}
|
||||
|
||||
query = select(UserModel).where(UserModel.username == username)
|
||||
@@ -133,14 +138,21 @@ def add_user_route(app: FastAPI):
|
||||
headers={"WWW-Authenticate": "Bearer"},
|
||||
)
|
||||
|
||||
token = Token(
|
||||
token=CryptUtils.create_access_token(user.username),
|
||||
token_type="Bearer",
|
||||
access_token = CryptUtils.create_token(
|
||||
username=user.username,
|
||||
type="access",
|
||||
expires_delta=timedelta(minutes=env.jwt_access_token_expire_minutes),
|
||||
)
|
||||
refresh_token = CryptUtils.create_token(
|
||||
username=user.username,
|
||||
type="refresh",
|
||||
expires_delta=timedelta(minutes=env.jwt_refresh_token_expire_minutes),
|
||||
)
|
||||
|
||||
return {
|
||||
"result": user,
|
||||
"token": token,
|
||||
"access_token": access_token,
|
||||
"refresh_token": refresh_token,
|
||||
}
|
||||
|
||||
# 获取用户信息接口
|
||||
@@ -187,7 +199,7 @@ unauthorized_exception = HTTPException(
|
||||
# 获取当前用户信息,通过注入的token来获取当前用户信息,如果token有效则返回用户信息,无效则抛出异常
|
||||
async def get_current_user(session: AsyncSessionDep, token: str = Depends(oauth2_scheme)):
|
||||
try:
|
||||
username = CryptUtils.get_username_from_token(token)
|
||||
username = CryptUtils.get_token_info(token).get('username')
|
||||
if not username:
|
||||
raise unauthorized_exception
|
||||
except InvalidTokenError:
|
||||
|
||||
Reference in New Issue
Block a user