Files
zhuiguang-ai/.trae/specs/modules/06-auth.md
T

1.6 KiB

认证模块

技术栈

  • NextAuth.js v4
  • Credentials Provider(用户名密码 + 用户邮箱密码)
  • JWT Session策略

配置 (src/lib/auth.ts)

管理员认证

  • 唯一凭证: admin@zhuiguang.ai / admin123
  • 硬编码在auth.ts中,非数据库查询

用户认证

  • 邮箱+密码注册/登录
  • 用户数据存储在User表
  • 密码bcrypt加密

Session策略

  • 使用JWT,不使用数据库session
  • JWT密钥: NEXTAUTH_SECRET 环境变量

回调函数

  • jwt: 登录时将用户信息加入token
  • session: 将token中的用户信息传递给session

路由保护 (src/middleware.ts)

保护规则

  • 保护 /admin 下所有路由
  • 跳过 /admin/login
  • 使用NextAuth middleware进行认证检查

登录流程

  1. 访问 /admin/* → middleware检查session
  2. 未登录 → 重定向到 /admin/login
  3. 登录页提交表单 → Server Action验证凭证
  4. 验证成功 → 重定向到 /admin

管理员API认证 (src/lib/admin-auth.ts)

requireAdmin中间件

  • 所有 /api/admin/ 路由必须使用requireAdmin中间件
  • 验证流程: 检查session → 验证邮箱是否为admin@zhuiguang.ai
  • 已覆盖28个后台API端点

登录页

  • 管理员登录: src/app/(admin)/admin/login/page.tsx (原生HTML表单 + CSRF Token)
  • 用户登录: src/app/login/page.tsx (NextAuth Credentials + GitHub OAuth)
  • 用户登录弹窗: src/components/common/LoginModal.tsx

环境变量

NEXTAUTH_URL=http://localhost:3100
NEXTAUTH_SECRET=<secret>
GITHUB_ID=<github-oauth-id>
GITHUB_SECRET=<github-oauth-secret>