javascript - Twilio 验证不起作用,它一直返回 undefined
问题描述
我正在使用 React Native 我一遍又一遍地停留在同一个问题上。
此代码使用 axios。我不知道为什么它一直返回未定义。我正确地写了我所有的 twilio id。
我使用了无服务器 twilio,它可以工作,但我不知道如何以我的方式改变它。如果我不能再使用此代码,请告诉我是否有其他好方法。我不知道如何使用 node.js。我会很感激你的帮助。
这是代码。
获取.js
'use strict';
Object.defineProperty(exports, '__esModule', {
value: true,
});
exports.default = void 0;
var _querystring = _interopRequireDefault(require('querystring'));
var _axios = _interopRequireDefault(require('axios'));
function _interopRequireDefault(obj) {
return obj && obj.__esModule ? obj : {default: obj};
}
class Fetch {
constructor({twilioServiceSid, twilioAccountSid, twilioAuthToken}) {
const fetch = _axios.default.create({
baseURL: `https://verify.twilio.com/v2/Services/${twilioServiceSid}`,
auth: {
username: twilioAccountSid,
password: twilioAuthToken,
},
});
this.fetch = fetch;
}
async post({path, payload}) {
try {
const obj = {
To: payload.phone,
Channel: 'sms',
};
if ('code' in payload) {
obj['Code'] = payload.code;
}
const {status, data} = await this.fetch.request({
method: 'POST',
url: path,
data: _querystring.default.stringify(obj),
});
return {
status,
data,
};
} catch (error) {
return error;
}
}
}
exports.default = Fetch;
验证.js
'use strict';
Object.defineProperty(exports, '__esModule', {
value: true,
});
exports.default = void 0;
var _phone = _interopRequireDefault(require('phone'));
var _fetch = _interopRequireDefault(require('./fetch'));
function _interopRequireDefault(obj) {
return obj && obj.__esModule ? obj : {default: obj};
}
class Serify {
constructor({twilioServiceSid, twilioAccountSid, twilioAuthToken}) {
this.fetch = new _fetch.default({
twilioServiceSid,
twilioAccountSid,
twilioAuthToken,
});
this.twilioAccountSid = twilioAccountSid;
this.twilioAuthToken = twilioAuthToken;
}
async start({phone, country}) {
try {
const number = (0, _phone.default)(phone, country ? country : 'USA');
if (!number) {
throw new Error(
'Invalid phone number. Please provide the country code in an ISO-3166 alpha 3 format.',
);
}
const response = await this.fetch.post({
path: 'Verifications',
payload: {
phone: number,
},
});
return {
code: response.status,
data: response.data,
};
} catch (error) {
return new Error(error);
}
}
async verify({phone, country, code}) {
try {
const number = (0, _phone.default)(phone, country ? country : 'USA');
if (!number) {
throw new Error(
'Invalid phone number. Please provide the country code in an ISO-3166 alpha 3 format.',
);
}
if (code.length <= 3) {
throw new Error('Invalid SMS code.');
}
const response = await this.fetch.post({
path: 'VerificationCheck',
payload: {
phone: number,
code: code.toString(),
},
});
return {
code: response.status,
data: response.data,
};
} catch (error) {
return new Error(error);
}
}
}
exports.default = Serify;
const verify = new Serify({
twilioServiceSid: '',
twilioAccountSid: '',
twilioAuthToken: '',
});
try {
const ss = await verify.start({
phone: '+1456123123',
});
console.log(ss);
} catch (e) {
console.log(e);
}
解决方案
Twilio 开发人员布道者在这里。
我不确定你说的哪个部分返回未定义。但是,这里有一个更大的问题。
构建本机应用程序时,您无法将 Twilio 凭据嵌入应用程序中,也无法从应用程序直接向 Twilio 发出 API 请求。恶意用户可以反编译应用程序、提取您的帐户凭据并滥用您的 Twilio 帐户。
您不应该从您的应用程序发出 API 请求。相反,您应该构建一个服务器端代理来存储您的 Twilio 凭据并发出您从应用程序触发的 API 请求。
我没有 Twilio 验证和 React Native 的示例,但理论与从 React 应用程序发送 SMS相同。
如果您已经设法使用 Twilio Serverless 实现了这一点,那么您应该回到那个版本。如果您对此有疑问,我会问一个新问题。
推荐阅读
- c# - 使用 Linq 查询语法在 C# 中使用实体框架搜索 XML 数据类型列
- javascript - 在注册时检查电子邮件是否已存在于 firestore auth (Angular)
- html - 为什么我的 ::before 元素仅在我使用绝对位置时才显示?
- javascript - 根据单选选择添加 HTML 表单的操作
- python - 为什么我的 Python 机器人有时会多次发帖?
- java - 如果浏览器控制台有任何 SEVERE 日志,则获取浏览器日志并使 TestNG 测试失败
- rstudio - 如何扩展 RStudio MathJax 以在“实时”笔记本中包含扩展?
- javascript - Wordpress 中的 GA 自定义维度 - 正确实现数据层
- flutter - Flutter:带有前导图标和标题的 CupertinoNavigationBar
- design-patterns - 直接将消息代理与最终用户客户端一起使用