fix: add error handling for admin login page and document admin credentials

- Add URL error parameter handling in login page
- Display appropriate error messages for different error types
- Document default admin credentials
- Provide security guidelines and password management instructions
This commit is contained in:
张翔
2026-03-13 12:31:14 +08:00
parent 5bc8356a37
commit 46e851bc3a
2 changed files with 134 additions and 1 deletions
+111
View File
@@ -0,0 +1,111 @@
# 管理员账号信息
## 默认管理员凭据
### 登录信息
- **邮箱**: `admin@novalon.cn`
- **密码**: `admin123456`
- **登录地址**: `http://localhost:3000/admin/login`
### 权限说明
- 管理员账号拥有完整的后台管理权限
- 可以管理内容、用户、配置和日志
- 可以修改其他用户信息(包括密码)
## 修改管理员密码
### 方法1:通过后台管理界面
1. 使用管理员账号登录后台
2. 进入"用户管理"页面
3. 找到管理员账号
4. 点击"编辑"按钮
5. 输入新密码并保存
### 方法2:通过API
```bash
# 使用管理员token修改密码
curl -X PUT http://localhost:3000/api/admin/users/[user-id] \
-H "Content-Type: application/json" \
-H "Authorization: Bearer YOUR_TOKEN" \
-d '{
"password": "new_password_here"
}'
```
### 方法3:重新运行seed脚本
```bash
npm run db:seed
```
## 创建新管理员账号
### 通过API创建
```bash
curl -X POST http://localhost:3000/api/admin/users \
-H "Content-Type: application/json" \
-H "Authorization: Bearer YOUR_TOKEN" \
-d '{
"email": "new_admin@example.com",
"password": "secure_password",
"name": "新管理员",
"isAdmin": true
}'
```
## 安全建议
### ⚠️ 重要提示
1. **立即修改默认密码** - 生产环境必须修改默认密码
2. **使用强密码** - 至少12位,包含大小写字母、数字和特殊字符
3. **定期更换密码** - 建议每3个月更换一次
4. **启用双因素认证** - 如果支持的话
5. **限制登录尝试** - 防止暴力破解
### 密码安全策略
- 最小长度:8个字符
- 必须包含:大小写字母、数字
- 建议包含:特殊字符
- 禁止使用:常见密码、个人信息
## 常见问题
### Q: 忘记管理员密码怎么办?
A: 重新运行seed脚本会重置为默认密码,但这会删除所有现有用户数据。
### Q: 如何创建多个管理员账号?
A: 通过后台管理界面或API创建新用户,并将 `isAdmin` 设置为 `true`
### Q: 登录时提示"认证配置错误"?
A: 检查NextAuth配置,确保环境变量正确设置。
### Q: 如何禁用某个管理员账号?
A: 通过API或数据库将该用户的 `isAdmin` 设置为 `false`
## 相关文件
- **Seed脚本**: `src/db/seed.ts`
- **用户Schema**: `src/db/schema.ts`
- **认证配置**: `src/lib/auth.ts`
- **登录页面**: `src/app/admin/login/page.tsx`
## 技术细节
### 密码加密
- 使用 `bcryptjs` 进行密码哈希
- 盐值轮数:10
- 算法:bcrypt
### 会话管理
- 使用NextAuth.js进行会话管理
- 会话存储:数据库
- 会话有效期:可配置
### 权限检查
- 基于 `isAdmin` 字段
- 通过 `checkIsAdmin()` 函数验证
- 支持细粒度权限控制
---
**最后更新**: 2026-03-13
**版本**: 1.0.0
+23 -1
View File
@@ -1,6 +1,6 @@
'use client';
import { useState, Suspense } from 'react';
import { useState, useEffect, Suspense } from 'react';
import { signIn } from 'next-auth/react';
import { useRouter, useSearchParams } from 'next/navigation';
import { Eye, EyeOff, Mail, Lock, AlertCircle, Loader2 } from 'lucide-react';
@@ -9,6 +9,7 @@ function LoginForm() {
const router = useRouter();
const searchParams = useSearchParams();
const callbackUrl = searchParams.get('callbackUrl') || '/admin';
const urlError = searchParams.get('error');
const [email, setEmail] = useState('');
const [password, setPassword] = useState('');
@@ -16,6 +17,27 @@ function LoginForm() {
const [error, setError] = useState('');
const [loading, setLoading] = useState(false);
useEffect(() => {
if (urlError) {
switch (urlError) {
case 'Configuration':
setError('认证配置错误,请联系管理员');
break;
case 'AccessDenied':
setError('访问被拒绝,请检查权限');
break;
case 'Verification':
setError('验证失败,请重试');
break;
case 'CredentialsSignin':
setError('邮箱或密码错误');
break;
default:
setError('登录失败,请稍后重试');
}
}
}, [urlError]);
const handleSubmit = async (e: React.FormEvent) => {
e.preventDefault();
setError('');