fix: add UNIQUE on email, check dup email in profile update, generic error messages in auth route
This commit is contained in:
@@ -67,7 +67,7 @@ async function initSchema(connection) {
|
|||||||
id INT AUTO_INCREMENT PRIMARY KEY,
|
id INT AUTO_INCREMENT PRIMARY KEY,
|
||||||
username VARCHAR(50) NOT NULL UNIQUE,
|
username VARCHAR(50) NOT NULL UNIQUE,
|
||||||
password VARCHAR(255) NOT NULL,
|
password VARCHAR(255) NOT NULL,
|
||||||
email VARCHAR(100) NOT NULL,
|
email VARCHAR(100) NOT NULL UNIQUE,
|
||||||
game_name VARCHAR(50) NOT NULL,
|
game_name VARCHAR(50) NOT NULL,
|
||||||
game_uid VARCHAR(50) NOT NULL,
|
game_uid VARCHAR(50) NOT NULL,
|
||||||
role ENUM('owner','admin','player') NOT NULL DEFAULT 'player',
|
role ENUM('owner','admin','player') NOT NULL DEFAULT 'player',
|
||||||
|
|||||||
@@ -71,7 +71,8 @@ router.post('/register', validateLengths({
|
|||||||
|
|
||||||
res.status(201).json({ message: '注册成功,请查收验证邮件' });
|
res.status(201).json({ message: '注册成功,请查收验证邮件' });
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
res.status(500).json({ error: err.message });
|
console.error('[auth]', err);
|
||||||
|
res.status(500).json({ error: '服务器内部错误' });
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -91,7 +92,8 @@ router.get('/verify-email', async (req, res) => {
|
|||||||
|
|
||||||
res.json({ message: '邮箱验证成功,现在可以登录了' });
|
res.json({ message: '邮箱验证成功,现在可以登录了' });
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
res.status(500).json({ error: err.message });
|
console.error('[auth]', err);
|
||||||
|
res.status(500).json({ error: '服务器内部错误' });
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -126,7 +128,8 @@ router.post('/login', async (req, res) => {
|
|||||||
},
|
},
|
||||||
});
|
});
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
res.status(500).json({ error: err.message });
|
console.error('[auth]', err);
|
||||||
|
res.status(500).json({ error: '服务器内部错误' });
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -139,7 +142,8 @@ router.get('/me', authenticate, async (req, res) => {
|
|||||||
if (!user) return res.status(404).json({ error: '用户不存在' });
|
if (!user) return res.status(404).json({ error: '用户不存在' });
|
||||||
res.json(user);
|
res.json(user);
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
res.status(500).json({ error: err.message });
|
console.error('[auth]', err);
|
||||||
|
res.status(500).json({ error: '服务器内部错误' });
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -157,6 +161,8 @@ router.put('/profile', authenticate, async (req, res) => {
|
|||||||
if (!/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(req.body.email)) {
|
if (!/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(req.body.email)) {
|
||||||
return res.status(400).json({ error: '邮箱格式不正确' });
|
return res.status(400).json({ error: '邮箱格式不正确' });
|
||||||
}
|
}
|
||||||
|
const dup = await getRow('SELECT id FROM users WHERE email = ? AND id != ?', [req.body.email, req.user.id]);
|
||||||
|
if (dup) return res.status(400).json({ error: '邮箱已被其他账号使用' });
|
||||||
fields.email = req.body.email;
|
fields.email = req.body.email;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -174,7 +180,8 @@ router.put('/profile', authenticate, async (req, res) => {
|
|||||||
const token = generateToken(updated);
|
const token = generateToken(updated);
|
||||||
res.json({ message: '更新成功', token, user: updated });
|
res.json({ message: '更新成功', token, user: updated });
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
res.status(500).json({ error: err.message });
|
console.error('[auth]', err);
|
||||||
|
res.status(500).json({ error: '服务器内部错误' });
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -196,7 +203,8 @@ router.put('/password', authenticate, async (req, res) => {
|
|||||||
await query('UPDATE users SET password = ? WHERE id = ?', [hashed, req.user.id]);
|
await query('UPDATE users SET password = ? WHERE id = ?', [hashed, req.user.id]);
|
||||||
res.json({ message: '密码修改成功' });
|
res.json({ message: '密码修改成功' });
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
res.status(500).json({ error: err.message });
|
console.error('[auth]', err);
|
||||||
|
res.status(500).json({ error: '服务器内部错误' });
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user