主要更新: - ✅ 完成主题配色从暗色到亮蓝白配色的全面转换 - ✅ 实现高薪岗位页面及后端API集成 - ✅ 完成登录注册页面及认证系统 - ✅ 实现预招录确认功能 - ✅ 添加数据库管理和维护工具脚本 - ✅ 优化错误处理和用户体验 核心功能: 1. 首页 (index.html) - 3D地球、专业分类、过渡岗位 2. 高薪岗位页面 (high.html) - 岗位详情、预招录确认、成功案例 3. 登录注册 (auth.html) - 用户认证、专业分类选择 4. 后端API - RESTful接口,JWT认证,MySQL数据库 技术栈: - 前端:Three.js, GSAP, 原生JavaScript - 后端:Node.js, Express, MySQL - 认证:JWT, bcrypt - 样式:自定义CSS,响应式设计 数据库工具: - kill-by-ids.js - 批量终止MySQL进程 - unlock-all-tables.js - 解锁数据库表 - init-db.js - 初始化数据库 - 其他管理脚本 🤖 Generated with Claude Code Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
77 lines
1.7 KiB
JavaScript
77 lines
1.7 KiB
JavaScript
/**
|
||
* JWT认证中间件
|
||
*/
|
||
|
||
const jwt = require('jsonwebtoken');
|
||
|
||
const JWT_SECRET = process.env.JWT_SECRET || 'duoduo-career-jwt-secret-key-2024';
|
||
|
||
/**
|
||
* 验证JWT Token
|
||
*/
|
||
const verifyToken = (req, res, next) => {
|
||
try {
|
||
// 从请求头获取token
|
||
const token = req.headers.authorization?.replace('Bearer ', '');
|
||
|
||
if (!token) {
|
||
return res.status(401).json({
|
||
success: false,
|
||
message: '未提供认证令牌'
|
||
});
|
||
}
|
||
|
||
// 验证token
|
||
const decoded = jwt.verify(token, JWT_SECRET);
|
||
req.user = decoded;
|
||
next();
|
||
} catch (error) {
|
||
if (error.name === 'TokenExpiredError') {
|
||
return res.status(401).json({
|
||
success: false,
|
||
message: '令牌已过期,请重新登录'
|
||
});
|
||
}
|
||
|
||
return res.status(401).json({
|
||
success: false,
|
||
message: '无效的认证令牌'
|
||
});
|
||
}
|
||
};
|
||
|
||
/**
|
||
* 验证管理员权限
|
||
*/
|
||
const verifyAdmin = (req, res, next) => {
|
||
if (req.user.role !== 'admin') {
|
||
return res.status(403).json({
|
||
success: false,
|
||
message: '需要管理员权限'
|
||
});
|
||
}
|
||
next();
|
||
};
|
||
|
||
/**
|
||
* 可选的Token验证(用于获取登录状态但不强制要求)
|
||
*/
|
||
const optionalAuth = (req, res, next) => {
|
||
try {
|
||
const token = req.headers.authorization?.replace('Bearer ', '');
|
||
if (token) {
|
||
const decoded = jwt.verify(token, JWT_SECRET);
|
||
req.user = decoded;
|
||
}
|
||
} catch (error) {
|
||
// 忽略错误,继续执行
|
||
}
|
||
next();
|
||
};
|
||
|
||
module.exports = {
|
||
verifyToken,
|
||
verifyAdmin,
|
||
optionalAuth
|
||
};
|