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("初始化数据库")
# 定时器
scheduler.add_job(clear_session, "interval", seconds=5)
scheduler.add_job(clear_session, "interval", seconds=30, misfire_grace_time=10)
scheduler.start()
logger.info("初始化定时器")
@ -78,7 +78,7 @@ def create_app():
return {"message": "hello"}
@app.get(
"/check_init",
"/api/check_init",
tags=["System"],
description="系统是否初始化",
response_model=InitStatusResponse,
@ -87,7 +87,7 @@ def create_app():
return InitStatusResponse(data=await is_init())
@app.post(
"/init_system",
"/api/init_system",
tags=["System"],
description="系统初始化",
response_model=InitStatusResponse,
@ -121,7 +121,10 @@ def create_app():
return InitStatusResponse(success=False, message=str(e))
@app.post(
"/login", tags=["User"], description="用户登录", response_model=LoginResponse
"/api/login",
tags=["User"],
description="用户登录",
response_model=LoginResponse,
)
async def login(login_info: LoginRequest):
user = await DB.User.filter(
@ -137,15 +140,27 @@ def create_app():
return LoginResponse(success=False, message="帐号或密码错误")
@app.post(
"/logout", tags=["User"], description="退出登录", response_model=BaseResponse
"/api/logout",
tags=["User"],
description="退出登录",
response_model=BaseResponse,
)
async def logout(token: str):
sessions.pop(token, None)
logger.info(sessions)
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(
"/run", tags=["Flow"], description="执行命令", response_model=BaseResponse
"/api/run", tags=["Flow"], description="执行命令", response_model=BaseResponse
)
async def flow_run(id: int):
nodes = []
@ -167,7 +182,7 @@ def create_app():
nodes.append(cmd_node_3)
# 设置依赖关系: node0 - "true" >> node1 - "true" >> node2
for i in range(len(nodes) -1):
for i in range(len(nodes) - 1):
nodes[i] - "true" >> nodes[i + 1]
flow = F.AsyncFlow(git_node_0)
@ -209,10 +224,8 @@ def create_app():
)
},
"01K3JHS5HTY78Z4EYWRFW5TA77": {
"cmd": "\n".join([
"pwd"
]),
}
"cmd": "\n".join(["pwd"]),
},
}
)
shared = {}

View File

@ -8,6 +8,12 @@ class BaseModel(Model):
def json(self, del_columns=None):
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:
for column in del_columns:
try:

View File

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