Cloud Functions for Firebase 运行 进入无限循环

Cloud Functions for Firebase running into infinite loop

我有一个自定义逻辑来验证用户。

我已经为 Firebase 编写了一个云函数来验证自定义令牌。

问题是云函数没有终止,而是 运行 进入无限循环,直到 Firebase 终止该函数

云函数运行在匹配和非匹配场景中都变得无穷大。

代码如下:

/*  CLOUD FUNCTION */
exports.verifyToken = functions.https.onRequest((req, res) => {

  var corsFn = cors();
  corsFn(req, res, function () {
    verifyTheUserToken(req, res);

  });
});


function verifyTheUserToken(req, res) {


  if (!req.headers.authorization || !req.headers.authorization.startsWith('Bearer ')) {
    console.error('No Firebase ID token was passed as a Bearer token in the Authorization header.');
    res.status(403).send('Unauthorized');
  }

  const firebaseToken = req.headers.authorization.split('Bearer ')[1];
  const userId = req.body.uid;
  const receievedToken = req.body.token;

  return admin.auth().verifyIdToken(firebaseToken).then(decodedFirebaseToken => {
    console.log('ID Token correctly decoded', decodedFirebaseToken);
    console.log('req', req.body);
    return 'sucess';

  }).then(function (receivedValues) {

    return admin.database().ref().child('userTokens').child(userId).child('token').once('value');

  }).then(function (snapshot) {

    if (!snapshot.val()) {
      return Promise.reject('token is not set ');
    }

    if (snapshot.val() != receievedToken) {
      return Promise.reject('token doesnt match');
    }

    return 'verified';

  }).then(function (success) {

    return admin.database().ref().child('users').child(userId).child('isVerified').set(true);

  }).then(function (success) {

    console.log('The user is verified');
    return;

  }).catch(function (error) {

    console.log('Error', error);
    return;
  });

}

客户端我正在做一个 HTTP 请求来调用 firebase 云函数。

/* CLIENT SIDE */
var currentUser = firebase.auth().currentUser.uid;
var firebaseUserToken = firebase.auth().currentUser.getToken();

firebase.auth().currentUser.getToken(/* forceRefresh */ true).then(function (firebaseUserToken) {
  fetch('https://us-central1-MYAPP.cloudfunctions.net/verifyToken', {

    'method': 'POST',
    'headers': {
      'Authorization': 'Bearer ' + firebaseUserToken,
      'Content-Type': 'application/json'
    },
    'body': JSON.stringify({
      'uid': currentUser,
      'token': 1234,
    })
  }).then(function (response) {
    console.log('successful response');
  }).catch(function (error) {
    console.error('Error in fetch', error);

  });

}).catch(function (error) {
  console.error('Error in getting firebase token', error);

});

我无法找出无限循环的原因。

如果能提供任何帮助,我将不胜感激。 谢谢!

我错过了 res.send() 个成功案例。

根据文档:

始终使用 send()、redirect() 或 end() 结束 HTTP 函数。否则,您的函数可能会继续运行并被系统强制终止。

https://firebase.google.com/docs/functions/http-events