167 lines
3.7 KiB
Markdown
167 lines
3.7 KiB
Markdown
# 注册和登录问题快速修复指南
|
||
|
||
## 🔍 当前问题
|
||
|
||
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 文件说明
|