59 lines
1.6 KiB
Markdown
59 lines
1.6 KiB
Markdown
# 认证模块
|
|
|
|
## 技术栈
|
|
- 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>
|
|
```
|