diff --git a/backend/db.js b/backend/db.js index cef1c34..6c3e6e1 100644 --- a/backend/db.js +++ b/backend/db.js @@ -67,7 +67,7 @@ async function initSchema(connection) { id INT AUTO_INCREMENT PRIMARY KEY, username VARCHAR(50) NOT NULL UNIQUE, password VARCHAR(255) NOT NULL, - email VARCHAR(100) NOT NULL, + email VARCHAR(100) NOT NULL UNIQUE, game_name VARCHAR(50) NOT NULL, game_uid VARCHAR(50) NOT NULL, role ENUM('owner','admin','player') NOT NULL DEFAULT 'player', diff --git a/backend/routes/auth.js b/backend/routes/auth.js index c7229f9..2423344 100644 --- a/backend/routes/auth.js +++ b/backend/routes/auth.js @@ -71,7 +71,8 @@ router.post('/register', validateLengths({ res.status(201).json({ message: '注册成功,请查收验证邮件' }); } 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: '邮箱验证成功,现在可以登录了' }); } 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) { - 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: '用户不存在' }); res.json(user); } 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)) { 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; } @@ -174,7 +180,8 @@ router.put('/profile', authenticate, async (req, res) => { const token = generateToken(updated); res.json({ message: '更新成功', token, user: updated }); } 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]); res.json({ message: '密码修改成功' }); } catch (err) { - res.status(500).json({ error: err.message }); + console.error('[auth]', err); + res.status(500).json({ error: '服务器内部错误' }); } });