5.8 KiB
Raw Permalink Blame History

快速测试指南

🚀 Phase 2 认证系统测试

前置准备

  1. 确保数据库运行
# 检查数据库连接
npm run prisma:studio
  1. 配置环境变量
# 复制 .env.example 到 .env
cp .env.example .env

# 编辑 .env,至少配置:
# - DATABASE_URL
# - JWT_SECRET
  1. 运行系统初始化
npx tsx scripts/init-system.ts

预期输出:

🚀 开始系统初始化...
✅ 数据库连接成功
✅ 默认超级管理员创建成功
📧 邮箱: admin@system.local
👤 姓名: SuperAdmin
🔑 密码: Admin@123456
⚠️  请在首次登录后立即修改邮箱、姓名和密码!

📝 测试步骤

1. 启动开发服务器

npm run dev

访问:http://localhost:3000


2. 测试登录功能

测试用例 1:使用邮箱登录

  1. 访问 http://localhost:3000/login
  2. 输入:
    • 邮箱/姓名:admin@system.local
    • 密码:Admin@123456
  3. 点击"登录"

预期结果:

  • ✅ 登录成功
  • ✅ 自动跳转到 /first-login 页面

测试用例 2:使用姓名登录

  1. 访问 http://localhost:3000/login
  2. 输入:
    • 邮箱/姓名:SuperAdmin
    • 密码:Admin@123456
  3. 点击"登录"

预期结果:

  • ✅ 登录成功
  • ✅ 自动跳转到 /first-login 页面

测试用例 3:错误密码

  1. 访问 http://localhost:3000/login
  2. 输入:
    • 邮箱/姓名:admin@system.local
    • 密码:WrongPassword
  3. 点击"登录"

预期结果:

  • ❌ 显示错误:"密码错误"
  • 💡 显示建议:"您正在使用邮箱登录,如果忘记密码,请联系管理员重置"

测试用例 4:不存在的用户

  1. 访问 http://localhost:3000/login
  2. 输入:
    • 邮箱/姓名:notexist@example.com
    • 密码:Password@123
  3. 点击"登录"

预期结果:

  • ❌ 显示错误:"该邮箱未注册"
  • 💡 显示建议:"如果您想使用姓名登录,请直接输入姓名"

3. 测试首次登录强制修改

  1. 使用默认账号登录后,自动跳转到 /first-login
  2. 输入新信息:
    • 新邮箱:admin@company.com
    • 新姓名:管理员
    • 新密码:NewAdmin@123456
    • 确认密码:NewAdmin@123456
  3. 点击"确认修改"

预期结果:

  • ✅ 修改成功
  • ✅ 自动跳转到首页 /
  • ✅ Token 已更新

测试密码强度验证

输入弱密码(如 123456),观察实时提示:

预期显示:

  • ❌ 密码长度至少 8 位
  • ❌ 必须包含至少一个大写字母
  • ❌ 必须包含至少一个小写字母
  • ❌ 必须包含至少一个特殊字符
  • 🔒 提交按钮被禁用

输入强密码(如 NewAdmin@123456),观察提示:

预期显示:

  • ✅ 密码强度符合要求
  • 🔓 提交按钮可用

4. 测试注册功能(API)

使用 Postman 或 curl 测试:

curl -X POST http://localhost:3000/api/auth/register \
  -H "Content-Type: application/json" \
  -d '{
    "email": "design@company.com",
    "name": "设计师张三",
    "password": "Designer@123456",
    "jobNumber": "JS0001"
  }'

预期响应:

{
  "message": "注册成功",
  "user": {
    "id": "xxx",
    "email": "design@company.com",
    "name": "设计师张三",
    "role": "USER",
    "businessRoles": ["DESIGN"],
    "status": "PENDING",
    "createdAt": "2025-12-12T..."
  }
}

测试姓名重复

再次注册相同姓名:

curl -X POST http://localhost:3000/api/auth/register \
  -H "Content-Type: application/json" \
  -d '{
    "email": "another@company.com",
    "name": "设计师张三",
    "password": "Designer@123456"
  }'

预期响应:

{
  "error": "该姓名已被使用",
  "suggestion": "请使用不同的姓名或添加后缀(如:张三_设计、李四_建模)"
}

5. 验证数据库记录

打开 Prisma Studio:

npm run prisma:studio

访问:http://localhost:5555

检查 User 表

  • ✅ 应该有 1 个超级管理员(修改后的信息)
  • ✅ 应该有 1 个设计师(如果注册成功)
  • ✅ isFirstLogin 应该为 false(修改后)

检查 ActivityLog 表

应该有以下日志记录:

  • USER_REGISTER - 用户注册
  • USER_LOGIN - 用户登录
  • USER_FIRST_LOGIN_UPDATE - 首次登录修改信息

🔍 常见问题

Q1: 数据库连接失败

解决方案:

  1. 检查 PostgreSQL 是否运行
  2. 检查 .env 中的 DATABASE_URL 是否正确
  3. 运行 npx prisma migrate dev 确保数据库结构最新

Q2: JWT Token 无效

解决方案:

  1. 检查 .env 中是否配置了 JWT_SECRET
  2. 清除浏览器 localStorage
  3. 重新登录

Q3: 首次登录页面无法访问

解决方案:

  1. 确保已登录(localStorage 中有 auth_token)
  2. 检查 Token 是否有效
  3. 检查用户的 isFirstLogin 字段

Q4: 密码强度验证不通过

解决方案: 确保密码满足以下要求:

  • 至少 8 位
  • 包含大写字母
  • 包含小写字母
  • 包含数字
  • 包含特殊字符(!@#$%^&*(),.?":{}|<>)

✅ 测试检查清单

  • 系统初始化成功
  • 使用邮箱登录成功
  • 使用姓名登录成功
  • 错误密码提示正确
  • 不存在用户提示正确
  • 首次登录强制修改成功
  • 密码强度实时验证正常
  • 注册 API 正常工作
  • 姓名重复检查正常
  • 数据库记录正确
  • 操作日志记录正确

📊 性能检查

API 响应时间

使用浏览器开发者工具检查:

  • 登录 API:< 200ms
  • 注册 API:< 200ms
  • 首次登录修改 API:< 200ms

页面加载时间

  • 登录页面:< 1s
  • 首次登录页面:< 1s

🎯 下一步

测试通过后,可以开始 Phase 3:权限系统实现

  • 权限检查函数
  • 权限中间件
  • 前端权限控制
  • 用户管理界面

祝测试顺利! 🚀