# 注册和登录问题快速修复指南

## 🔍 当前问题

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.61: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 文件说明
