You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter集成Supabase时TextLocal短信OTP验证功能异常

解决Supabase + TextLocal发送OTP时400错误的排查步骤

1. 核对短信模板的一致性

  • 确保Supabase Auth里配置的TextLocal短信模板,和你在TextLocal、DLT平台审核通过的完全一模一样,哪怕多一个空格、标点符号不对都会触发接口报错。
  • 模板里必须包含{{ .Code }}占位符,Supabase靠这个替换成实际的OTP码,注意占位符的格式(点和大括号的位置不能错)。

2. 检查Supabase的配置参数

  • 重新核对TextLocal的API密钥,直接从TextLocal控制台复制粘贴,别手动输入避免打错,也别带多余的空格或换行。
  • 确认发送者名称(Sender ID)是DLT和TextLocal双重审核通过的,大小写、字符长度必须完全匹配,差一点都不行。

3. 规范手机号格式

  • 调用signInWithOTP()时,手机号必须用国际格式(带国家码前缀),比如印度号要写成+91XXXXXXXXX,不能只填本地号码。
  • 手机号里不能有空格、括号、横杠这类特殊字符,纯数字加国家码就行。

4. 查Supabase日志找具体原因

  • 登录Supabase控制台,进Auth -> Logs,找到对应错误的日志条目,里面会有TextLocal返回的具体错误提示(比如模板不匹配、Sender ID无效、余额不足),比客户端的模糊报错有用得多。

5. 直接测试TextLocal API

  • 用Postman或者curl直接调用TextLocal的短信API,用和Supabase相同的参数(API密钥、Sender ID、模板、手机号),看能不能正常发送:
    curl -X POST https://api.textlocal.in/send/ \
    -d "apiKey=你的TextLocal密钥" \
    -d "sender=审核通过的Sender ID" \
    -d "numbers=带国家码的手机号" \
    -d "message=你的OTP模板内容,要包含{{ .Code }}" \
    -d "template_id=DLT审核通过的模板ID"
    
    如果直接调用也失败,问题出在TextLocal侧;如果成功,那就是Supabase的配置还有遗漏。

6. 确认Supabase Auth地区设置

  • 把Supabase项目的Auth地区改成和TextLocal服务覆盖匹配的区域,比如针对印度用户选ap-south-1(孟买),减少跨地区调用的异常。

内容的提问来源于stack exchange,提问作者Abhi sharma

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 20:01:01