包含: - furniture-3d-system:Next.js 16 全栈应用(资产中心、产品管理、3D装配动画) - autocad-plugin:AutoCAD 家具导出插件源码 - 资产中心改造:编辑弹窗化、删除功能、Toast反馈、自定义Select组件 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
7.6 KiB
7.6 KiB
Phase 2 完成报告 - 认证系统实现
✅ 完成时间
2025-12-12
📊 完成情况
已完成任务
- 系统初始化
- 注册功能
- 登录功能
- 首次登录强制修改
- 密码管理工具
- JWT Token 工具
- 认证中间件
🔧 实现的功能
1. 系统初始化
文件:src/lib/init.ts
功能:
- 检查数据库连接
- 创建默认超级管理员
- 数据完整性检查
- 获取系统状态
默认超级管理员:
邮箱: admin@system.local
姓名: SuperAdmin
密码: Admin@123456
角色: SUPER_ADMIN
首次登录: true
初始化脚本:scripts/init-system.ts
npx tsx scripts/init-system.ts
2. 密码管理工具
文件:src/lib/password.ts
功能:
- 密码强度验证
- 密码加密(bcrypt)
- 密码验证
- 随机密码生成
密码强度要求:
- 最小长度:8 位
- 最大长度:50 位
- 必须包含大写字母
- 必须包含小写字母
- 必须包含数字
- 必须包含特殊字符
3. JWT Token 工具
文件:src/lib/jwt.ts
功能:
- 生成 JWT Token
- 验证 Token
- 解析 Token
- 从请求头提取 Token
- 检查 Token 是否过期
Token Payload:
{
userId: string;
email: string;
name: string;
role: Role;
status: UserStatus;
isFirstLogin: boolean;
departmentId?: string;
teamId?: string;
}
配置:
- 密钥:
JWT_SECRET环境变量 - 过期时间:
JWT_EXPIRES_IN环境变量(默认 7 天)
4. 认证中间件
文件:src/lib/auth-middleware.ts
功能:
- 验证请求的认证信息
- 检查用户角色权限
- 提供便捷的权限检查函数
- API 路由保护包装器
权限检查函数:
hasRole()- 检查是否有指定角色isAdmin()- 检查是否为管理员isDepartmentManagerOrAbove()- 检查是否为部门管理员或更高isTeamLeaderOrAbove()- 检查是否为组长或更高
使用示例:
export const GET = withAuth(
async (request, payload) => {
// 处理逻辑
},
{ allowedRoles: ['SUPER_ADMIN', 'ADMIN'] }
);
5. 注册 API
接口:POST /api/auth/register
请求体:
{
"email": "user@example.com",
"name": "张三",
"password": "Password@123",
"role": "DESIGNER",
"departmentId": "xxx",
"teamId": "xxx"
}
功能:
- 邮箱格式验证
- 姓名格式验证(2-20个字符,支持中文、英文、数字、下划线)
- 密码强度验证
- 邮箱唯一性检查
- 姓名唯一性检查
- 部门和小组验证
- 创建用户
- 记录操作日志
响应:
{
"message": "注册成功",
"user": {
"id": "xxx",
"email": "user@example.com",
"name": "张三",
"role": "DESIGNER",
"status": "ACTIVE",
"createdAt": "2025-12-12T..."
}
}
6. 登录 API
接口:POST /api/auth/login
请求体:
{
"identifier": "user@example.com", // 邮箱或姓名
"password": "Password@123"
}
功能:
- 支持邮箱或姓名登录
- 智能提示(邮箱/姓名格式识别)
- 密码验证
- 用户状态检查(在职/离职/暂停)
- 生成 JWT Token
- 更新最后登录时间
- 记录登录日志
智能提示示例:
- 输入邮箱但找不到 → "该邮箱未注册,如果您想使用姓名登录,请直接输入姓名"
- 输入姓名但找不到 → "该姓名未注册,如果您想使用邮箱登录,请输入完整邮箱地址"
- 密码错误 → "密码错误,您正在使用邮箱登录,如果忘记密码,请联系管理员重置"
响应:
{
"message": "登录成功",
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
"user": {
"id": "xxx",
"email": "user@example.com",
"name": "张三",
"role": "DESIGNER",
"status": "ACTIVE",
"isFirstLogin": false,
"department": { "id": "xxx", "name": "设计部" },
"team": { "id": "xxx", "name": "建模组" },
"avatar": null,
"lastLoginAt": "2025-12-12T..."
}
}
7. 首次登录强制修改 API
接口:POST /api/auth/first-login-update
请求头:
Authorization: Bearer <token>
请求体:
{
"email": "new@example.com",
"name": "新姓名",
"password": "NewPassword@123"
}
功能:
- 验证 Token
- 检查是否为首次登录
- 邮箱格式验证
- 姓名格式验证
- 密码强度验证
- 邮箱唯一性检查(排除自己)
- 姓名唯一性检查(排除自己)
- 更新用户信息
- 生成新的 Token
- 记录操作日志
响应:
{
"message": "信息修改成功",
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
"user": {
"id": "xxx",
"email": "new@example.com",
"name": "新姓名",
"role": "SUPER_ADMIN",
"status": "ACTIVE",
"isFirstLogin": false
}
}
8. 登录页面
路由:/login
功能:
- Apple HIG 2025 风格设计
- 支持邮箱或姓名登录
- 实时错误提示
- 智能建议显示
- 加载状态
- 自动跳转(首次登录 →
/first-login,否则 →/)
设计特点:
- 毛玻璃背景
- 渐变装饰元素
- 大圆角卡片(20px)
- 流畅的过渡动画
- 清晰的错误提示
9. 首次登录修改页面
路由:/first-login
功能:
- Apple HIG 2025 风格设计
- 强制修改邮箱、姓名和密码
- 实时密码强度验证
- 密码确认验证
- 安全警告提示
- 修改成功后自动跳转
密码强度提示:
- 实时显示密码强度要求
- 绿色勾号表示符合要求
- 红色叉号表示不符合要求
- 禁用提交按钮直到密码符合要求
📝 环境变量
需要在 .env 文件中添加:
# JWT 配置
JWT_SECRET=your-secret-key-change-in-production
JWT_EXPIRES_IN=7d
🧪 测试
1. 系统初始化测试
npx tsx scripts/init-system.ts
预期结果:
- ✅ 数据库连接成功
- ✅ 创建默认超级管理员
- ✅ 显示默认账号信息
2. 登录测试
测试用例 1:使用邮箱登录
邮箱: admin@system.local
密码: Admin@123456
测试用例 2:使用姓名登录
姓名: SuperAdmin
密码: Admin@123456
预期结果:
- ✅ 登录成功
- ✅ 返回 Token
- ✅ 跳转到首次登录修改页面
3. 首次登录修改测试
测试数据:
新邮箱: admin@company.com
新姓名: 管理员
新密码: NewAdmin@123456
预期结果:
- ✅ 修改成功
- ✅ 返回新的 Token
- ✅ 跳转到首页
📊 操作日志
所有认证相关操作都会记录到 ActivityLog 表:
USER_REGISTER- 用户注册USER_LOGIN- 用户登录USER_LOGIN_FAILED- 登录失败USER_FIRST_LOGIN_UPDATE- 首次登录修改信息
🔒 安全特性
1. 密码安全
- bcrypt 加密(10 轮)
- 强密码策略
- 密码不会在响应中返回
2. Token 安全
- JWT 签名验证
- Token 过期时间控制
- 首次登录后 Token 失效
3. 输入验证
- 邮箱格式验证
- 姓名格式验证
- 密码强度验证
- SQL 注入防护(Prisma ORM)
4. 操作日志
- 记录所有关键操作
- 包含操作者、时间、详情
- 支持审计追踪
🎯 下一步
Phase 3: 权限系统实现
- 权限检查函数
- 权限中间件
- 前端权限控制
- 用户管理界面
预计时间:1-2 周
📚 相关文档
Phase 2 完成!准备开始 Phase 3! 🚀