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