云功能的燃烧池跑到无限循环中



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

我为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

最新更新