feat: 登录验证

This commit is contained in:
李如威 2025-08-28 11:12:25 +08:00
parent fcc5d11804
commit b1492434a0
3 changed files with 31 additions and 12 deletions

View File

@ -57,7 +57,7 @@ async def lifespan(app: FastAPI):
) )
logger.info("初始化数据库") logger.info("初始化数据库")
# 定时器 # 定时器
scheduler.add_job(clear_session, "interval", seconds=5) scheduler.add_job(clear_session, "interval", seconds=30, misfire_grace_time=10)
scheduler.start() scheduler.start()
logger.info("初始化定时器") logger.info("初始化定时器")
@ -78,7 +78,7 @@ def create_app():
return {"message": "hello"} return {"message": "hello"}
@app.get( @app.get(
"/check_init", "/api/check_init",
tags=["System"], tags=["System"],
description="系统是否初始化", description="系统是否初始化",
response_model=InitStatusResponse, response_model=InitStatusResponse,
@ -87,7 +87,7 @@ def create_app():
return InitStatusResponse(data=await is_init()) return InitStatusResponse(data=await is_init())
@app.post( @app.post(
"/init_system", "/api/init_system",
tags=["System"], tags=["System"],
description="系统初始化", description="系统初始化",
response_model=InitStatusResponse, response_model=InitStatusResponse,
@ -121,7 +121,10 @@ def create_app():
return InitStatusResponse(success=False, message=str(e)) return InitStatusResponse(success=False, message=str(e))
@app.post( @app.post(
"/login", tags=["User"], description="用户登录", response_model=LoginResponse "/api/login",
tags=["User"],
description="用户登录",
response_model=LoginResponse,
) )
async def login(login_info: LoginRequest): async def login(login_info: LoginRequest):
user = await DB.User.filter( user = await DB.User.filter(
@ -137,15 +140,27 @@ def create_app():
return LoginResponse(success=False, message="帐号或密码错误") return LoginResponse(success=False, message="帐号或密码错误")
@app.post( @app.post(
"/logout", tags=["User"], description="退出登录", response_model=BaseResponse "/api/logout",
tags=["User"],
description="退出登录",
response_model=BaseResponse,
) )
async def logout(token: str): async def logout(token: str):
sessions.pop(token, None) sessions.pop(token, None)
logger.info(sessions) logger.info(sessions)
return BaseResponse() return BaseResponse()
@app.get(
"/api/current_user",
tags=["User"],
description="当前用户信息",
response_model=LoginResponse,
)
async def current_user(user: DB.User = Depends(get_current_user)):
return LoginResponse(data=user.json(del_columns=["password"]))
@app.post( @app.post(
"/run", tags=["Flow"], description="执行命令", response_model=BaseResponse "/api/run", tags=["Flow"], description="执行命令", response_model=BaseResponse
) )
async def flow_run(id: int): async def flow_run(id: int):
nodes = [] nodes = []
@ -209,10 +224,8 @@ def create_app():
) )
}, },
"01K3JHS5HTY78Z4EYWRFW5TA77": { "01K3JHS5HTY78Z4EYWRFW5TA77": {
"cmd": "\n".join([ "cmd": "\n".join(["pwd"]),
"pwd" },
]),
}
} }
) )
shared = {} shared = {}

View File

@ -8,6 +8,12 @@ class BaseModel(Model):
def json(self, del_columns=None): def json(self, del_columns=None):
user_json = dict(self) user_json = dict(self)
user_json["create_time"] = (
self.create_time.strftime("%Y-%m-%d %H:%M:%S") if self.create_time else ""
)
user_json["update_time"] = (
self.update_time.strftime("%Y-%m-%d %H:%M:%S") if self.update_time else ""
)
if del_columns is not None: if del_columns is not None:
for column in del_columns: for column in del_columns:
try: try:

View File

@ -10,4 +10,4 @@ class LoginRequest(BaseModel):
return hashlib.md5(self.password.encode()).hexdigest() return hashlib.md5(self.password.encode()).hexdigest()
class LoginResponse(BaseResponse): class LoginResponse(BaseResponse):
data: dict | None data: dict | None = None