Files
yunhaifinance/backend/routes/auth.js
T

88 lines
2.0 KiB
JavaScript

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
});
console.log('用户 ' + username + ' 登录成功');
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: '登录失败',
error: error.message
});
}
});
router.get('/verify', authenticate, (req, res) => {
res.json({
success: true,
data: {
user: req.user
}
});
});
router.post('/logout', authenticate, (req, res) => {
console.log('用户 ' + req.user.username + ' 登出');
res.json({
success: true,
message: '登出成功'
});
});
module.exports = router;