对象数据为空的短信仍然发送给了twilio authy

时间:2019-01-24 16:26:17

标签: firebase react-native twilio twilio-api authy

我正在尝试使用Firebase功能实现身份节点电话验证,并且我的应用程序以react-native方式将消息发送到正确的手机,但是由于某种原因,我从api取回的数据没有任何提示

我的Api firebase功能

import * as functions from 'firebase-functions';
const authy = require('authy')('mySecret');


export const getCode = functions.https.onCall((data, context) => {
  const {
     number, countryCode
  } = data;

 return authy.phones().verification_start(number, countryCode, { via: 
'sms', locale: 'en', code_length: '4' }, (err: any, res: any) => {
    if (err) {
        throw new functions.https.HttpsError(err);
    }
    return res;
});
});

这是我从我的应用程序打来的电话

export default class test extends Component {

constructor() {
 super();
}

 componentWillMount() {
 const getCode = firebase.functions().httpsCallable('getCode');
 getCode({number: 'theCorrectNumber', countryCode: '44'})
   .then(function (result) {
     const data = result;
     console.log(data)
   }).catch( function (error){
   console.log(error)
 })
}

render() {
 return (
  <View/>
 );
}
}

1 个答案:

答案 0 :(得分:0)

这里是Twilio开发人员的传播者。

根据我假设您正在使用的Authy Node库中的信息,向API发出请求不会返回Promise。相反,它是使用request构建的,并且仅使用回调响应异步请求。您确实处理了回调,但是返回的是调用异步函数null的结果,而不是回调的结果。

也许在函数调用中包含回调会更好地工作:

import * as functions from 'firebase-functions';
const authy = require('authy')('mySecret');

export const getCode = functions.https.onCall((data, callback) => {
  const { number, countryCode } = data;

  return authy
    .phones()
    .verification_start(
      number,
      countryCode,
      { via: 'sms', locale: 'en', code_length: '4' },
      callback
    );
});

然后您可以像这样使用它:

export default class test extends Component {
  constructor() {
    super();
  }

  componentWillMount() {
    const getCode = firebase.functions().httpsCallable('getCode');
    getCode({ number: 'theCorrectNumber', countryCode: '44' }, (err, res) => {
      if (err) {
        throw new functions.https.HttpsError(err);
      }
      const data = res;
      console.log(data);
    });
  }

  render() {
    return <View />;
  }
}

让我知道是否有帮助。