feat: custom login endpoint + html modal login form
This commit is contained in:
parent
9e9f1f5284
commit
830cdd33e9
33
wwwroot/api/login.dspy
Normal file
33
wwwroot/api/login.dspy
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
# 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}}
|
||||||
@ -155,7 +155,7 @@ async function doLogin(){
|
|||||||
if(!u||!p){document.getElementById('login-msg').textContent='请输入用户名和密码';return}
|
if(!u||!p){document.getElementById('login-msg').textContent='请输入用户名和密码';return}
|
||||||
var fd=new FormData();fd.append('username',u);fd.append('passwd',p);
|
var fd=new FormData();fd.append('username',u);fd.append('passwd',p);
|
||||||
try{
|
try{
|
||||||
var r=await fetch('/rbac/user/up_login.dspy',{method:'POST',body:fd});
|
var r=await fetch('/pccs/api/login.dspy',{method:'POST',body:fd});
|
||||||
var d=await r.json();
|
var d=await r.json();
|
||||||
if(d.status==='ok'){closeLogin();checkLogin();document.getElementById('login-msg').textContent=''}
|
if(d.status==='ok'){closeLogin();checkLogin();document.getElementById('login-msg').textContent=''}
|
||||||
else document.getElementById('login-msg').textContent=d.message||'登录失败';
|
else document.getElementById('login-msg').textContent=d.message||'登录失败';
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user