Version 0.1.1 rise to flask app factory
This commit is contained in:
46
Html/apps/services/auth_service.py
Normal file
46
Html/apps/services/auth_service.py
Normal file
@@ -0,0 +1,46 @@
|
||||
# myapp/services/auth_service.py
|
||||
import os, uuid, json
|
||||
from flask import current_app, session
|
||||
|
||||
def create_user_json(username: str):
|
||||
user_dir = current_app.config["USER_DATA_DIR"]
|
||||
os.makedirs(user_dir, exist_ok=True)
|
||||
path = os.path.join(user_dir, f"{username}.json")
|
||||
if not os.path.exists(path):
|
||||
with open(path, "w", encoding="utf-8") as f:
|
||||
json.dump({"username": username}, f, ensure_ascii=False)
|
||||
|
||||
def register_user(username: str, password: str, *, teacher: bool=False):
|
||||
users_list = current_app.extensions["users_list"]
|
||||
# 你原逻辑似乎把 has_user 的判断反了:直觉上「不存在才允许新增」
|
||||
exists = users_list.has_user(username)
|
||||
if exists:
|
||||
return False, "用户已存在,请更换用户名"
|
||||
users_list.add_user(username, password, teacher=teacher)
|
||||
create_user_json(username)
|
||||
return True, "注册成功"
|
||||
|
||||
def login_user(username: str, password: str, *, require_teacher: bool=False):
|
||||
users_list = current_app.extensions["users_list"]
|
||||
pswd = users_list.get_user_pswd(username)
|
||||
if pswd is None or pswd != password:
|
||||
return False, "用户名或密码错误"
|
||||
|
||||
if require_teacher:
|
||||
is_teacher = users_list.get_user_is_teacher(username)
|
||||
if not is_teacher:
|
||||
return False, "用户名不存在或非教师账号"
|
||||
|
||||
# 设置会话 + 关联映射
|
||||
user_uuid = "user_" + str(uuid.uuid4())
|
||||
session["user_id"] = user_uuid
|
||||
|
||||
username2uuid = current_app.extensions["username2uuid"]
|
||||
uuid2username = current_app.extensions["uuid2username"]
|
||||
username2uuid[username] = user_uuid
|
||||
uuid2username[user_uuid] = username
|
||||
|
||||
return True, "登录成功"
|
||||
|
||||
def logout_user():
|
||||
session.pop("user_id", None)
|
||||
Reference in New Issue
Block a user