supabase.auth.signInWithOtp()无法resolve,魔法链接已发送无响应
Supabase signInWithOtp魔法链接发送成功但Promise不resolve问题排查
你遇到的问题是魔法链接能正常发送,但await supabase.auth.signInWithOtp()始终不resolve,导致后续代码无法执行。结合本地开发环境的情况,主要排查以下几个点:
1. 检查Supabase控制台的Auth URL配置
Supabase Auth的流程依赖正确的重定向URL配置,本地开发时必须把你的站点地址添加到允许列表:
- 登录Supabase Dashboard,进入项目的「Authentication」→「URL Configuration」
- 确保「Site URL」填写了本地开发地址(比如
http://localhost:5173) - 在「Additional Redirect URLs」中也添加相同地址,保存更改
2. 调用signInWithOtp时显式指定redirectTo参数
默认情况下SDK会使用控制台配置的Site URL,但显式指定可以避免配置不一致导致的等待逻辑卡住:
const { data, error } = await supabase.auth.signInWithOtp({ email: email.value, options: { redirectTo: 'http://localhost:5173', // 替换成你的本地开发地址 shouldCreateUser: true // 确保新用户可自动注册 } });
3. 升级Supabase JS SDK到最新版本
旧版本SDK存在发送OTP后Promise不resolve的bug,直接升级即可解决:
# npm npm update @supabase/supabase-js # yarn yarn upgrade @supabase/supabase-js # pnpm pnpm update @supabase/supabase-js
4. 排查浏览器隐私设置
本地开发时,浏览器的隐私拦截(比如阻止第三方cookie、启用严格跟踪保护)可能导致SDK无法完成后续监听逻辑,尝试在无痕模式下测试,或允许当前站点的所有cookie权限。
验证修改
完成上述调整后,再次触发魔法链接发送,应该能立即进入console.log代码块,sent_magic_link.value会被设为true,正常触发「请查收邮件」的提示。
内容的提问来源于stack exchange,提问作者ToyChicken
相关产品推荐
相关产品推荐

