0

我试图用firebase函数和我的应用程序在react-native中实现authy-node电话验证,消息被发送到正确的手机,但由于某种原因,我从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/>
 );
}
}
4

1 回答 1

0

Twilio 开发人员布道者在这里。

从我在假设您正在使用的Authy Node库中看到的内容来看,向 API 发出请求不会返回 Promise。相反,它是使用请求构建的,并且仅使用回调来响应异步请求。您确实处理了回调,但是您返回的是调用异步函数的结果,即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 />;
  }
}

让我知道这是否有帮助。

于 2019-01-24T21:41:14.797 回答