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

Ionic Angular调用Twilio API发短信出现401鉴权与URL凭证报错求助

解决方案

报错原因

  • 第一个URL带凭证的报错:浏览器原生安全策略禁止在fetch请求的URL中嵌入账号:密码格式的认证信息,该写法本身就不被浏览器支持。
  • 第二个401未授权报错:存在两处参数格式不符合Twilio API要求的问题:
    1. 请求头Content-Type错误,Twilio短信API要求提交格式为application/x-www-form-urlencoded,你当前用的application/json格式无法被接口识别
    2. 请求体格式错误,from、to参数不需要包裹为数组,且需要转为url编码格式而非JSON字符串
    3. 额外检查:Basic认证的拼接规则是Account SID:Auth Token,不要把两个值的顺序填反,否则也会触发401

修复后可运行代码

signIn(form){
  // 注意替换为你自己的Account SID、Auth Token、发送号码、接收号码
  const accountSid = '你的Account SID';
  const authToken = '你的Auth Token';
  const fromNumber = '+xxxxx';
  const toNumber = '+xxxxx';

  // 构造url编码格式的请求体
  const body = new URLSearchParams();
  body.set('From', fromNumber);
  body.set('To', toNumber);
  body.set('Body', `${this.contractor.firstName} ${this.contractor.lastName}`);

  fetch(`https://api.twilio.com/2010-04-01/Accounts/${accountSid}/Messages.json`,{
    method: 'POST',
    headers: {
      'Authorization': 'Basic ' + btoa(`${accountSid}:${authToken}`),
      'Content-Type': 'application/x-www-form-urlencoded'
    },
    body: body
  })
  .then(response => response.json())
  .then(res => console.log('短信发送成功', res))
  .catch(err => console.error('发送失败', err));
}

额外注意事项

  • 该方案仅适合纯内部使用的场景,如果你后续要对外发布应用,绝对不能把Auth Token硬编码在前端代码中,所有人都可以通过抓包或者反编译获取到你的密钥,造成账号被盗用
  • 如果修改后仍然出现跨域报错,你可以在Ionic项目中配置本地代理,或者部署一个轻量的后端中转请求

内容的提问来源于stack exchange,提问作者Cal Galway

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.20 13:36:03