# pccs login — 独立登录端点, 不依赖 rbac dspy 注入函数 import hashlib, datetime from sqlor.dbpools import DBPools from appPublic.uniqueID import getID username = params_kw.get('username', '') password = params_kw.get('password', '') or params_kw.get('passwd', '') if not username or not password: return {'status': 'error', 'message': '请输入用户名和密码'} dbname = 'pccs' db = DBPools() async with db.sqlorContext(dbname) as sor: # 先查用户 recs = await sor.R('users', {'username': username}) if not recs: return {'status': 'error', 'message': '用户名或密码错误'} user = recs[0] # 密码验证: 对比 sha256 哈希 pw_hash = hashlib.sha256(password.encode()).hexdigest() stored_pw = user.password or '' if pw_hash != stored_pw: return {'status': 'error', 'message': '用户名或密码错误'} # 更新最后登录 now = datetime.datetime.now().isoformat() await sor.U('users', {'id': user.id}, {'last_login': now, 'login_fail_count': 0}) return {'status': 'ok', 'message': '登录成功', 'user': {'id': user.id, 'username': user.username, 'nick_name': user.nick_name or user.username}}