47 lines
1.7 KiB
Python
47 lines
1.7 KiB
Python
# 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)
|