| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586 |
- const express = require('express');
- const bcrypt = require('bcryptjs');
- const jwt = require('jsonwebtoken');
- const router = express.Router();
- const authMiddleware = require('../middleware/authMiddleware');
- const User = require('../models/User');
- // 注册
- router.post('/register', async (req, res) => {
- const { username, password } = req.body;
- try {
- const existing = await User.findOne({ username });
- if (existing) {
- return res.badRequest('用户已存在');
- }
- const hashedPassword = await bcrypt.hash(password, 10);
- const user = new User({ username, password: hashedPassword });
- await user.save();
- res.sendSuccess('注册成功');
- }
- catch (err) {
- res.serverError();
- }
- });
- // 登录
- router.post('/login', async (req, res) => {
- const { username, password } = req.body;
- try {
- const user = await User.findOne({ username });
- if (!user) {
- return res.badRequest('用户不存在');
- }
- const isMatch = await bcrypt.compare(password, user.password);
- if (!isMatch) {
- return res.badRequest('密码错误');
- }
- // 签发 Access Token 和 Refresh Token
- const accessToken = jwt.sign({ userId: user._id }, process.env.JWT_SECRET, { expiresIn: '1h' });
- const refreshToken = jwt.sign({ userId: user._id }, process.env.JWT_SECRET, { expiresIn: '7d' });
- res.json({ access_token: accessToken, refresh_token: refreshToken });
- }
- catch (err) {
- res.serverError();
- }
- });
- // 刷新 Token
- router.post('/refresh_token', async (req, res) => {
- const { refreshToken } = req.body;
- if (!refreshToken) {
- return res.unauthorized('无效的 "refresh token"');
- }
- try {
- // 验证 Refresh Token
- const decoded = jwt.verify(refreshToken, process.env.JWT_SECRET);
- const user = await User.findById(decoded.userId);
- if (!user) {
- return res.unauthorized('用户不存在');
- }
- // 签发新的 Access Token
- const newAccessToken = jwt.sign({ userId: user._id }, process.env.JWT_SECRET, { expiresIn: '1h' });
- res.json({ access_token: newAccessToken });
- }
- catch (err) {
- res.unauthorized('无效或已过期的 "refresh token"');
- }
- });
- // 受保护接口
- // router.get('/profile', authMiddleware, async (req, res) => {
- // const user = await User.findById(req.userId).select('-password');
- // res.json(user);
- // });
- module.exports = router;
|