110 lines
3.0 KiB
JavaScript
110 lines
3.0 KiB
JavaScript
const express = require('express');
|
|
const jwt = require('jsonwebtoken');
|
|
const { v4: uuidv4 } = require('uuid');
|
|
const { readTable, writeTable } = require('../utils/db');
|
|
const authMiddleware = require('../middleware/auth');
|
|
|
|
const router = express.Router();
|
|
|
|
// POST /api/auth/login
|
|
router.post('/login', (req, res) => {
|
|
const { username, password } = req.body || {};
|
|
if (!username || !password) {
|
|
return res.status(400).json({ code: 400, message: '用户名和密码不能为空' });
|
|
}
|
|
|
|
const users = readTable('users');
|
|
const user = users.find((u) => u.username === username && u.password === password);
|
|
if (!user) {
|
|
return res.status(401).json({ code: 401, message: '用户名或密码错误' });
|
|
}
|
|
|
|
const token = jwt.sign(
|
|
{ userId: user.id, username: user.username, name: user.name, sex: user.sex, isDriver: user.isDriver, deptId: user.deptId, deptName: user.deptName, roleList: user.roleList },
|
|
process.env.JWT_SECRET,
|
|
{ expiresIn: process.env.JWT_EXPIRES_IN || '7d' }
|
|
);
|
|
|
|
return res.json({
|
|
code: 200,
|
|
data: {
|
|
token,
|
|
name: user.name,
|
|
sex: user.sex,
|
|
isDriver: user.isDriver,
|
|
deptId: user.deptId,
|
|
deptName: user.deptName,
|
|
roleList: user.roleList,
|
|
},
|
|
});
|
|
});
|
|
|
|
// POST /api/auth/register
|
|
router.post('/register', (req, res) => {
|
|
const { username, password, nickname } = req.body || {};
|
|
if (!username || !password) {
|
|
return res.status(400).json({ code: 400, message: '用户名和密码不能为空' });
|
|
}
|
|
|
|
const users = readTable('users');
|
|
if (users.find((u) => u.username === username)) {
|
|
return res.status(409).json({ code: 409, message: '用户名已存在' });
|
|
}
|
|
|
|
const newUser = {
|
|
id: `user-${uuidv4()}`,
|
|
username,
|
|
password,
|
|
name: nickname || username,
|
|
sex: 'unknown',
|
|
isDriver: false,
|
|
deptId: 0,
|
|
deptName: '',
|
|
roleList: ['user'],
|
|
createdAt: new Date().toISOString(),
|
|
};
|
|
users.push(newUser);
|
|
writeTable('users', users);
|
|
|
|
const token = jwt.sign(
|
|
{ userId: newUser.id, username: newUser.username, name: newUser.name, sex: newUser.sex, isDriver: newUser.isDriver, deptId: newUser.deptId, deptName: newUser.deptName, roleList: newUser.roleList },
|
|
process.env.JWT_SECRET,
|
|
{ expiresIn: process.env.JWT_EXPIRES_IN || '7d' }
|
|
);
|
|
|
|
return res.json({
|
|
code: 200,
|
|
data: {
|
|
token,
|
|
name: newUser.name,
|
|
sex: newUser.sex,
|
|
isDriver: newUser.isDriver,
|
|
deptId: newUser.deptId,
|
|
deptName: newUser.deptName,
|
|
roleList: newUser.roleList,
|
|
},
|
|
});
|
|
});
|
|
|
|
// GET /api/auth/me
|
|
router.get('/me', authMiddleware, (req, res) => {
|
|
const users = readTable('users');
|
|
const user = users.find((u) => u.id === req.user.userId);
|
|
if (!user) {
|
|
return res.status(404).json({ code: 404, message: '用户不存在' });
|
|
}
|
|
return res.json({
|
|
code: 200,
|
|
data: {
|
|
name: user.name,
|
|
sex: user.sex,
|
|
isDriver: user.isDriver,
|
|
deptId: user.deptId,
|
|
deptName: user.deptName,
|
|
roleList: user.roleList,
|
|
},
|
|
});
|
|
});
|
|
|
|
module.exports = router;
|