187 lines
4.8 KiB
Markdown
187 lines
4.8 KiB
Markdown
# 🔐 认证系统设置指南
|
||
|
||
## 📋 当前状态总结
|
||
|
||
您的登录系统现在已经**完全接入Supabase数据库**,不再使用硬编码验证。
|
||
|
||
### ✅ 已完成的修改
|
||
|
||
1. **登录页面更新** (`pages/login.vue`)
|
||
- 移除了硬编码的测试账户验证
|
||
- 集成了真正的Supabase认证逻辑
|
||
- 使用 `useAuth()` 组合式函数进行认证
|
||
|
||
2. **环境配置修复** (`.env`)
|
||
- 删除了重复的 `SUPABASE_ANON_KEY` 配置
|
||
- 确保配置文件格式正确
|
||
|
||
3. **管理员账户脚本** (`database/create-admin.sql`)
|
||
- 创建了完整的管理员账户初始化脚本
|
||
- 包含密码加密和数据库表结构
|
||
|
||
## 🚀 部署步骤
|
||
|
||
### 第一步:初始化数据库
|
||
|
||
1. 登录您的 [Supabase Dashboard](https://supabase.com/dashboard)
|
||
2. 选择项目:`riwtulmitqioswmgwftg` (Twilio项目)
|
||
3. 打开 **SQL编辑器**
|
||
4. 复制并运行以下脚本:
|
||
|
||
#### A. 运行管理员账户创建脚本
|
||
```sql
|
||
-- 复制 database/create-admin.sql 的完整内容并运行
|
||
```
|
||
|
||
#### B. 运行订单系统初始化脚本
|
||
```sql
|
||
-- 复制 database/init.sql 的完整内容并运行
|
||
```
|
||
|
||
### 第二步:验证数据库设置
|
||
|
||
运行以下查询验证设置:
|
||
|
||
```sql
|
||
-- 检查管理员账户
|
||
SELECT * FROM admin_users WHERE username = 'admin@example.com';
|
||
SELECT * FROM profiles WHERE email = 'admin@example.com' AND role = 'admin';
|
||
|
||
-- 检查订单相关表
|
||
SELECT 'orders' as table_name, COUNT(*) as count FROM orders
|
||
UNION ALL
|
||
SELECT 'users' as table_name, COUNT(*) as count FROM users
|
||
UNION ALL
|
||
SELECT 'interpreters' as table_name, COUNT(*) as count FROM interpreters
|
||
UNION ALL
|
||
SELECT 'service_rates' as table_name, COUNT(*) as count FROM service_rates;
|
||
```
|
||
|
||
### 第三步:启动应用
|
||
|
||
```bash
|
||
# 安装依赖(如果还没有)
|
||
npm install
|
||
|
||
# 启动开发服务器
|
||
npm run dev
|
||
```
|
||
|
||
### 第四步:测试登录
|
||
|
||
1. 访问 `http://localhost:3000`
|
||
2. 系统会自动跳转到登录页面
|
||
3. 使用以下管理员账户登录:
|
||
- **用户名**: `admin@example.com`
|
||
- **密码**: `admin123`
|
||
|
||
## 🔍 认证流程说明
|
||
|
||
### 登录验证流程
|
||
|
||
1. **用户输入** → 用户名/密码
|
||
2. **优先检查** → `admin_users` 表(管理员账户)
|
||
3. **密码验证** → 使用 bcrypt 验证加密密码
|
||
4. **备用检查** → `profiles` 表(普通用户中的管理员)
|
||
5. **权限验证** → 确保用户具有 `admin` 角色
|
||
6. **会话管理** → 保存用户信息到本地存储
|
||
7. **页面跳转** → 跳转到仪表板
|
||
|
||
### 数据库表结构
|
||
|
||
#### admin_users 表
|
||
- `id`: UUID 主键
|
||
- `username`: 用户名(邮箱)
|
||
- `password_hash`: bcrypt 加密密码
|
||
- `role`: 用户角色(admin)
|
||
- `full_name`: 全名
|
||
- `email`: 邮箱地址
|
||
|
||
#### profiles 表
|
||
- `id`: UUID 主键
|
||
- `email`: 邮箱地址
|
||
- `role`: 用户角色(customer/interpreter/admin)
|
||
- `full_name`: 全名
|
||
- 其他用户信息字段...
|
||
|
||
## 🛠️ 故障排除
|
||
|
||
### 常见问题
|
||
|
||
1. **登录失败:"用户名或密码错误"**
|
||
- 确认管理员账户已创建:`admin@example.com` / `admin123`
|
||
- 检查 `admin_users` 表是否有数据
|
||
- 验证密码哈希是否正确
|
||
|
||
2. **登录失败:"只有管理员可以访问后台系统"**
|
||
- 确认用户在 `profiles` 表中的 `role` 为 `admin`
|
||
- 检查 RLS 策略是否正确设置
|
||
|
||
3. **无法连接数据库**
|
||
- 检查 `.env` 文件配置
|
||
- 验证 Supabase URL 和 API Key
|
||
- 确认网络连接正常
|
||
|
||
### 调试方法
|
||
|
||
#### 检查浏览器控制台
|
||
```javascript
|
||
// 打开浏览器开发者工具,查看控制台输出
|
||
// 登录时会显示详细的错误信息
|
||
```
|
||
|
||
#### 检查数据库连接
|
||
```sql
|
||
-- 在Supabase SQL编辑器中运行
|
||
SELECT NOW() as current_time;
|
||
```
|
||
|
||
#### 验证管理员账户
|
||
```sql
|
||
-- 检查管理员账户是否存在
|
||
SELECT
|
||
username,
|
||
role,
|
||
full_name,
|
||
created_at,
|
||
CASE
|
||
WHEN password_hash IS NOT NULL THEN '密码已设置'
|
||
ELSE '密码未设置'
|
||
END as password_status
|
||
FROM admin_users
|
||
WHERE username = 'admin@example.com';
|
||
```
|
||
|
||
## 🔒 安全注意事项
|
||
|
||
1. **密码安全**
|
||
- 默认密码 `admin123` 仅用于测试
|
||
- 生产环境中请立即修改为强密码
|
||
|
||
2. **RLS 策略**
|
||
- 当前策略允许所有操作(用于开发)
|
||
- 生产环境需要实施严格的行级安全策略
|
||
|
||
3. **API 密钥**
|
||
- 不要将 Supabase API 密钥提交到公共代码仓库
|
||
- 使用环境变量管理敏感信息
|
||
|
||
## 📝 下一步计划
|
||
|
||
1. **测试完整登录流程**
|
||
2. **验证订单管理功能**
|
||
3. **检查用户权限控制**
|
||
4. **优化错误处理和用户体验**
|
||
5. **准备生产环境部署**
|
||
|
||
## 🎉 完成确认
|
||
|
||
当您完成以上步骤后,您的系统将具备:
|
||
|
||
- ✅ 真正的Supabase数据库认证
|
||
- ✅ 安全的密码加密存储
|
||
- ✅ 完整的管理员账户系统
|
||
- ✅ 订单管理数据库集成
|
||
- ✅ 用户权限控制机制
|
||
|
||
如果遇到任何问题,请查看浏览器控制台的错误信息,或检查Supabase Dashboard中的日志。 |