1.6 KiB
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: 登录时将用户信息加入tokensession: 将token中的用户信息传递给session
路由保护 (src/middleware.ts)
保护规则
- 保护
/admin下所有路由 - 跳过
/admin/login - 使用NextAuth middleware进行认证检查
登录流程
- 访问
/admin/*→ middleware检查session - 未登录 → 重定向到
/admin/login - 登录页提交表单 → Server Action验证凭证
- 验证成功 → 重定向到
/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>