Files

89 lines
2.1 KiB
JavaScript
Raw Permalink Normal View History

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(
2026-06-13 12:44:48 +08:00
'SELECT id, username, name, email, phone, role, avatar, passport, driver_license, 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: '',
2026-06-13 12:44:48 +08:00
avatar: user.avatar || null,
passport: user.passport || null,
driverLicense: user.driver_license || null,
token: token
}
});
} catch (error) {
console.error('登录失败:', error);
res.status(500).json({
success: false,
message: '登录失败',
error: process.env.NODE_ENV === 'development' ? error.message : '操作失败'
});
}
});
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;