feat: 内置演示账号 demo/demo1234 + 登录页一键填充 + 服务器地址修复

This commit is contained in:
root
2026-10-16 17:59:00 +08:00
parent 08b1854169
commit 6129c42890
2 changed files with 17 additions and 3 deletions
+9 -3
View File
@@ -29,10 +29,10 @@ export function LoginPage() {
setError('');
try {
if (mode === 'login') {
await serverLogin(username.trim(), password);
await serverLogin(username.trim(), password, serverUrl);
} else {
if (!invite.trim()) throw new Error('请填写邀请码');
await serverRegister(username.trim(), password, invite.trim());
await serverRegister(username.trim(), password, invite.trim(), serverUrl);
}
setTimeout(() => window.location.reload(), 200);
} catch (e) {
@@ -87,7 +87,13 @@ export function LoginPage() {
<Button variant="primary" size="lg" onClick={() => void submit()} disabled={busy}>
{busy ? '请稍候…' : (mode === 'login' ? '进入我的档案' : '创建我的档案')}
</Button>
<p className="text-center text-[11px] text-ink-3">数据按账号隔离存储 · 未注册用户请联系管理员获取邀请码</p>
<button
type="button"
className="mt-1 flex w-full items-center justify-center gap-1.5 rounded-md border border-dashed border-line px-3 py-2 text-[11.5px] text-ink-3 transition-colors hover:border-brand/40 hover:text-brand-text"
onClick={() => { setUsername('demo'); setPassword('demo1234'); }}
>
演示账号:demo / demo1234(点击填充)
</button>
</div>
</div>
</div>
+8
View File
@@ -208,6 +208,14 @@ function readJson(req) {
}
getDb();
// 种子演示账号(demo / demo1234,管理员权限),便于部署后立即可用
try {
const { register } = await import('./auth.mjs');
register({ username: 'demo', password: 'demo1234', device_name: 'seed' });
console.log('[footprints-sync] demo 账号已就绪 (demo / demo1234)');
} catch { /* 已存在则跳过 */ }
server.listen(PORT, '0.0.0.0', () => {
console.log('[footprints-sync] listening on 0.0.0.0:' + PORT);
console.log('[footprints-sync] data dir:', process.env.DATA_DIR || path.join(__dirname, '..', 'data'));