接入数据库

This commit is contained in:
comlibmb
2026-01-26 21:34:17 +08:00
parent c14f67cfc8
commit 3fbd9a2b3d
26 changed files with 3559 additions and 427 deletions

View File

@@ -0,0 +1,166 @@
# 注册和登录问题快速修复指南
## 🔍 当前问题
1. **注册时**:返回 500 错误 `Error sending confirmation email`
2. **登录时**:返回 400 错误 `Invalid login credentials`
**根本原因**
- `ENABLE_EMAIL_AUTOCONFIRM=false` - 需要邮件确认才能登录
- SMTP 配置是假的(`supabase-mail`, `fake_mail_user`),无法发送邮件
- 即使注册时邮件发送失败,用户可能已在 `auth.users` 中创建,但因为邮箱未确认,无法登录
---
## ✅ 立即解决方案(推荐)
### 修改 Supabase 配置
编辑 `supabase_pro/.env` 文件:
```env
## Email auth
ENABLE_EMAIL_SIGNUP=true
ENABLE_EMAIL_AUTOCONFIRM=true # 改为 true跳过邮件验证
```
### 重启 Supabase Auth 服务
```bash
cd supabase_pro
docker-compose restart auth
```
### 验证
1. **测试注册**:注册新用户,应该立即可以登录
2. **测试登录**:使用注册的邮箱和密码登录
---
## 🔧 如果用户已创建但邮箱未确认
如果之前注册的用户因为邮件发送失败而无法登录,可以手动确认邮箱:
### 方法一:在 Supabase Dashboard 中手动确认
1. 打开 Supabase Dashboard: http://192.168.1.63:3000
2. 进入 **Authentication****Users**
3. 找到对应的用户
4. 点击用户,在详情页中点击 **Confirm Email** 按钮
### 方法二:使用 SQL 手动确认
在 Supabase Dashboard 的 SQL Editor 中执行:
```sql
-- 查找未确认的用户
SELECT id, email, email_confirmed_at, created_at
FROM auth.users
WHERE email_confirmed_at IS NULL
ORDER BY created_at DESC;
-- 手动确认邮箱(替换 'user-email@example.com' 为实际邮箱)
UPDATE auth.users
SET email_confirmed_at = NOW()
WHERE email = 'user-email@example.com'
AND email_confirmed_at IS NULL;
```
---
## 📝 已改进的错误处理
### 注册页面
- ✅ 检测邮件发送失败错误500 + "confirmation email"
- ✅ 即使邮件发送失败,也会提示用户稍后尝试登录
- ✅ 更友好的错误提示
### 登录页面
- ✅ 检测邮箱未确认错误
- ✅ 检测凭证错误
- ✅ 更清晰的错误提示
---
## 🎯 推荐配置(开发环境)
```env
## Email auth
ENABLE_EMAIL_SIGNUP=true
ENABLE_EMAIL_AUTOCONFIRM=true # 开发环境跳过邮件验证
```
**优点**
- 注册后立即可以登录
- 无需配置 SMTP 服务
- 适合开发和测试
**注意**:生产环境建议使用真实的 SMTP 服务并启用邮件验证。
---
## 🔍 验证步骤
### 1. 检查配置是否生效
```bash
# 检查环境变量
cd supabase_pro
grep ENABLE_EMAIL_AUTOCONFIRM .env
```
应该显示:`ENABLE_EMAIL_AUTOCONFIRM=true`
### 2. 测试注册流程
1. 在前端注册新用户
2. 应该看到 "注册成功" 提示
3. 自动跳转到登录页面
4. 使用注册的邮箱和密码登录
5. 应该可以成功登录
### 3. 检查数据库
```sql
-- 检查新注册的用户
SELECT id, email, email_confirmed_at, created_at
FROM auth.users
ORDER BY created_at DESC
LIMIT 5;
-- 检查 ak_users 表
SELECT id, email, username, created_at
FROM ak_users
ORDER BY created_at DESC
LIMIT 5;
```
---
## 🐛 如果仍然无法登录
### 检查用户是否已创建
```sql
-- 检查用户是否存在
SELECT id, email, email_confirmed_at, encrypted_password IS NOT NULL as has_password
FROM auth.users
WHERE email = 'your-email@example.com';
```
### 如果用户存在但未确认
使用上面的 SQL 手动确认邮箱。
### 如果用户不存在
重新注册,确保配置 `ENABLE_EMAIL_AUTOCONFIRM=true` 已生效。
---
## 📚 相关文档
- `EMAIL_CONFIG_FIX.md` - 详细的邮件配置说明
- `QUICK_FIX.md` - 注册数据存储问题修复
- `README.md` - 用户认证相关 SQL 文件说明