feat: 添加批量删除、最近活动、界面优化等功能

This commit is contained in:
lulistart
2026-02-18 02:50:40 +08:00
parent 5e3cbb0eca
commit d5288035d4
31 changed files with 5899 additions and 139 deletions

111
src/routes/auth.js Normal file
View File

@@ -0,0 +1,111 @@
import express from 'express';
import { User } from '../models/index.js';
import { authenticateAdmin } from '../middleware/auth.js';
const router = express.Router();
// 登录
router.post('/login', async (req, res) => {
try {
const { username, password } = req.body;
if (!username || !password) {
return res.status(400).json({ error: '用户名和密码不能为空' });
}
const user = User.findByUsername(username);
if (!user) {
return res.status(401).json({ error: '用户名或密码错误' });
}
const isValid = await User.verifyPassword(password, user.password);
if (!isValid) {
return res.status(401).json({ error: '用户名或密码错误' });
}
// 使用 session 存储用户信息
req.session.userId = user.id;
req.session.username = user.username;
res.json({
success: true,
user: {
id: user.id,
username: user.username
}
});
} catch (error) {
console.error('登录失败:', error);
res.status(500).json({ error: '登录失败' });
}
});
// 登出
router.post('/logout', (req, res) => {
req.session.destroy((err) => {
if (err) {
console.error('登出失败:', err);
return res.status(500).json({ error: '登出失败' });
}
res.clearCookie('connect.sid');
res.json({ success: true });
});
});
// 检查认证状态
router.get('/check', authenticateAdmin, (req, res) => {
res.json({ authenticated: true });
});
// 获取当前用户信息
router.get('/profile', authenticateAdmin, (req, res) => {
const user = User.findById(req.session.userId);
if (!user) {
return res.status(404).json({ error: '用户不存在' });
}
res.json({
id: user.id,
username: user.username,
created_at: user.created_at
});
});
// 修改密码
router.post('/change-password', authenticateAdmin, async (req, res) => {
try {
const { oldPassword, newPassword } = req.body;
if (!oldPassword || !newPassword) {
return res.status(400).json({ error: '旧密码和新密码不能为空' });
}
if (newPassword.length < 6) {
return res.status(400).json({ error: '新密码长度至少为 6 位' });
}
const user = User.findById(req.session.userId);
if (!user) {
return res.status(404).json({ error: '用户不存在' });
}
const isValid = await User.verifyPassword(oldPassword, user.password);
if (!isValid) {
return res.status(401).json({ error: '旧密码错误' });
}
await User.updatePassword(user.id, newPassword);
res.json({ success: true, message: '密码修改成功' });
} catch (error) {
console.error('修改密码失败:', error);
res.status(500).json({ error: '修改密码失败' });
}
});
export default router;