2026-04-19 19:15:01 +08:00
|
|
|
const express = require('express');
|
|
|
|
|
const router = express.Router();
|
|
|
|
|
const db = require('../db');
|
|
|
|
|
const { hashPassword, verifyPassword, generateToken } = require('../utils/auth');
|
|
|
|
|
const { authenticate } = require('../middleware/auth');
|
|
|
|
|
|
|
|
|
|
router.post('/login', async (req, res) => {
|
|
|
|
|
try {
|
|
|
|
|
const { username, password } = req.body;
|
|
|
|
|
|
|
|
|
|
if (!username || !password) {
|
|
|
|
|
return res.status(400).json({
|
|
|
|
|
success: false,
|
|
|
|
|
message: '用户名和密码不能为空'
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const result = await db.query(
|
|
|
|
|
'SELECT id, username, name, email, phone, role, password_hash FROM users WHERE username = $1',
|
|
|
|
|
[username]
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
if (!result || result.rows.length === 0) {
|
|
|
|
|
return res.status(401).json({
|
|
|
|
|
success: false,
|
|
|
|
|
message: '用户名或密码错误'
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const user = result.rows[0];
|
|
|
|
|
|
|
|
|
|
if (!user.password_hash || !verifyPassword(password, user.password_hash)) {
|
|
|
|
|
return res.status(401).json({
|
|
|
|
|
success: false,
|
|
|
|
|
message: '用户名或密码错误'
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const token = generateToken({
|
|
|
|
|
id: user.id,
|
|
|
|
|
username: user.username,
|
|
|
|
|
role: user.role
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
res.json({
|
|
|
|
|
success: true,
|
|
|
|
|
data: {
|
|
|
|
|
id: user.id,
|
|
|
|
|
username: user.username,
|
|
|
|
|
name: user.name,
|
|
|
|
|
email: user.email,
|
|
|
|
|
phone: user.phone,
|
|
|
|
|
role: user.role,
|
|
|
|
|
department: '',
|
|
|
|
|
token: token
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
} catch (error) {
|
|
|
|
|
console.error('登录失败:', error);
|
|
|
|
|
res.status(500).json({
|
|
|
|
|
success: false,
|
|
|
|
|
message: '登录失败',
|
2026-05-15 12:02:24 +08:00
|
|
|
error: process.env.NODE_ENV === 'development' ? error.message : '操作失败'
|
2026-04-19 19:15:01 +08:00
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
router.get('/verify', authenticate, (req, res) => {
|
|
|
|
|
res.json({
|
|
|
|
|
success: true,
|
|
|
|
|
data: {
|
|
|
|
|
user: req.user
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
router.post('/logout', authenticate, (req, res) => {
|
|
|
|
|
res.json({
|
|
|
|
|
success: true,
|
|
|
|
|
message: '登出成功'
|
|
|
|
|
});
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
module.exports = router;
|