starraid/star-raid/js/auth.js
JOJO ab403f4cc7 后端化:账号系统+排行榜+图鉴收集同步+飞行员大厅(零依赖Node+SQLite)
- server/:node:http+node:sqlite 零依赖后端(users/sessions/user_stats/codex_unlocks/runs 五表)
- 安全:scrypt密码哈希/服务端session/全prepared statement/输入白名单/限流/CSP等安全头/静态白名单防穿越
- 前端:o-auth登陆注册 + o-home飞行员大厅(排行榜Top100三排序+图鉴展柜背景:随机3主3副2僚机+刷怪巡游)
- 图鉴改为收集点亮制(未收集=剪影+???),服务端codex_unlocks与本地并集同步
- 修复:回标题/大厅后背景卡在上场残影——render按battleUI门控+离场G=null;空闲=星空
- 结算上报:endRun/rush胜利两处submitRun,Boss击杀计数入排行榜
- playwright全流程验证通过(注册/登陆/游戏/结算/图鉴/安全注入/限流);游戏视觉未验收(用户亲自)
2026-08-06 04:20:25 +08:00

64 lines
2.1 KiB
JavaScript
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

"use strict";
/* ================= 认证流程:登陆/注册/登出 + 启动引导 ================= */
(function () {
const err = (t) => { $("auth-err").textContent = t || " "; };
function tab(login) {
$("tab-login").classList.toggle("primary", login);
$("tab-reg").classList.toggle("primary", !login);
$("f-login").classList.toggle("hide", !login);
$("f-reg").classList.toggle("hide", login);
err();
}
$("tab-login").onclick = () => tab(true);
$("tab-reg").onclick = () => tab(false);
$("f-login").addEventListener("submit", async (e) => {
e.preventDefault();
err("登陆中...");
const msg = await NET.login($("li-id").value.trim(), $("li-pw").value);
if (msg) { err(msg); SFX.hurt(); return; }
err(); SFX.level(); enterHome();
});
$("f-reg").addEventListener("submit", async (e) => {
e.preventDefault();
const name = $("rg-name").value.trim(), email = $("rg-email").value.trim();
const pw = $("rg-pw").value, pw2 = $("rg-pw2").value;
if (pw !== pw2) { err("两次输入的密码不一致"); SFX.hurt(); return; }
err("注册中...");
const msg = await NET.register(name, email, pw);
if (msg) { err(msg); SFX.hurt(); return; }
err(); SFX.level(); enterHome();
});
$("b-logout").onclick = async () => {
SFX.pick();
await NET.logout();
G = null; UI = "auth";
$("li-pw").value = "";
show("o-auth");
};
/* 进入基地(游戏主菜单) */
$("b-base").onclick = () => {
SFX.pick();
$("pilot-line").textContent = NET.user ? ("飞行员 " + NET.user.username) : " ";
bestLine(); UI = "title"; show("o-title");
};
$("b-lobby").onclick = () => { SFX.pick(); enterHome(); };
/* 启动引导:恢复会话 → 大厅;否则登陆页(网络故障给出提示) */
(async function boot() {
UI = "auth";
show("o-auth");
const r = await NET.api("/api/me", "GET");
if (r.ok) { NET._apply(r.data); enterHome(); }
else {
if (r.status === 0) err("无法连接服务器,请稍后刷新重试");
show("o-auth");
}
})();
})();