1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62
| const jwt = require('jsonwebtoken'); const { validationResult } = require('express-validator'); const User = require('../models/User');
const generateToken = (id) => { return jwt.sign({ id }, process.env.JWT_SECRET, { expiresIn: '30d', }); };
exports.register = async (req, res) => { try { const errors = validationResult(req); if (!errors.isEmpty()) { return res.status(400).json({ errors: errors.array() }); }
const { username, email, password } = req.body;
const userExists = await User.findOne({ $or: [{ email }, { username }] }); if (userExists) { return res.status(400).json({ message: '用户已存在' }); }
const user = await User.create({ username, email, password });
res.status(201).json({ token: generateToken(user._id), user: { id: user._id, username: user.username, email: user.email, }, }); } catch (error) { res.status(500).json({ message: error.message }); } };
exports.login = async (req, res) => { try { const { email, password } = req.body;
const user = await User.findOne({ email }); if (!user || !(await user.comparePassword(password))) { return res.status(401).json({ message: '邮箱或密码错误' }); }
res.json({ token: generateToken(user._id), user: { id: user._id, username: user.username, email: user.email, }, }); } catch (error) { res.status(500).json({ message: error.message }); } };
|