求助:Supabase未发送注册魔术链接,反而持续发送OTP
问题:Supabase 发送OTP验证码而非注册魔术链接
我希望向用户发送魔术链接,使其完成注册并获取项目的完整访问权限,但调用Supabase的signInWithOtp接口后,用户收到的始终是OTP验证码,而非直接的魔术链接。
实现代码
const { error } = await supabase.auth.signInWithOtp({ email: email, options: { shouldCreateUser: true, emailRedirectTo: `${window.location.origin}/auth/callback`, }, });
相关配置截图

解决方法
修正代码,指定魔术链接类型
signInWithOtp默认发送OTP验证码,需显式添加type: 'magiclink'参数来触发魔术链接发送:const { error } = await supabase.auth.signInWithOtp({ email: email, type: 'magiclink', // 关键:指定发送魔术链接 options: { shouldCreateUser: true, emailRedirectTo: `${window.location.origin}/auth/callback`, }, });验证Supabase控制台配置
- 进入项目控制台,打开Authentication -> Settings,确认
emailRedirectTo对应的域名已添加到Redirect URLs允许列表 - 切换到Email Templates,检查Magic Link模板是否启用,且模板内容包含
{{ .ConfirmationURL }}变量(魔术链接的占位符)
- 进入项目控制台,打开Authentication -> Settings,确认
内容的提问来源于stack exchange,提问作者Sohaib Ashraf




