# 认证模块 ## 技术栈 - 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= GITHUB_ID= GITHUB_SECRET= ```