Files
medical-mall/pages/user/test/QUICK_FIX_SIGNUP_LOGIN.md

3.7 KiB
Raw Blame History

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

🔍 当前问题

  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 文件:

## Email auth
ENABLE_EMAIL_SIGNUP=true
ENABLE_EMAIL_AUTOCONFIRM=true  # 改为 true跳过邮件验证

重启 Supabase Auth 服务

cd supabase_pro
docker-compose restart auth

验证

  1. 测试注册:注册新用户,应该立即可以登录
  2. 测试登录:使用注册的邮箱和密码登录

🔧 如果用户已创建但邮箱未确认

如果之前注册的用户因为邮件发送失败而无法登录,可以手动确认邮箱:

方法一:在 Supabase Dashboard 中手动确认

  1. 打开 Supabase Dashboard: http://192.168.1.61:3000
  2. 进入 AuthenticationUsers
  3. 找到对应的用户
  4. 点击用户,在详情页中点击 Confirm Email 按钮

方法二:使用 SQL 手动确认

在 Supabase Dashboard 的 SQL Editor 中执行:

-- 查找未确认的用户
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"
  • 即使邮件发送失败,也会提示用户稍后尝试登录
  • 更友好的错误提示

登录页面

  • 检测邮箱未确认错误
  • 检测凭证错误
  • 更清晰的错误提示

🎯 推荐配置(开发环境)

## Email auth
ENABLE_EMAIL_SIGNUP=true
ENABLE_EMAIL_AUTOCONFIRM=true  # 开发环境跳过邮件验证

优点

  • 注册后立即可以登录
  • 无需配置 SMTP 服务
  • 适合开发和测试

注意:生产环境建议使用真实的 SMTP 服务并启用邮件验证。


🔍 验证步骤

1. 检查配置是否生效

# 检查环境变量
cd supabase_pro
grep ENABLE_EMAIL_AUTOCONFIRM .env

应该显示:ENABLE_EMAIL_AUTOCONFIRM=true

2. 测试注册流程

  1. 在前端注册新用户
  2. 应该看到 "注册成功" 提示
  3. 自动跳转到登录页面
  4. 使用注册的邮箱和密码登录
  5. 应该可以成功登录

3. 检查数据库

-- 检查新注册的用户
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;

🐛 如果仍然无法登录

检查用户是否已创建

-- 检查用户是否存在
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 文件说明