为什么云功能日志消息为空?

时间:2018-03-27 06:50:22

标签: node.js firebase firebase-authentication google-cloud-functions

我已在Firebase控制台中设置了云功能,index.js内有以下内容。

const functions = require('firebase-functions');
const admin = require('firebase-admin');

const cors = require('cors');

const serviceAccount = require("./serviceAccountKey.json");

admin.initializeApp({
  credential: admin.credential.cert(serviceAccount),
  databaseURL: "https://**********.firebaseio.com"
});

const authCheck = (req, res) => {
  cors(req, res, () => {
    const tokenId = req.get('Authorization').split('Bearer ')[1];

    return admin.auth().verifyIdToken(tokenId)
      .then((decoded) => res.status(200).send(decoded))
      .catch((error) => res.status(401).send(error));
  });
};

module.exports = {
  authCheck: functions.https.onRequest(authCheck),
};

每当我尝试访问此HTTPS端点的URL时,云功能总是超时。我无法调试问题所在,因为控制台中的日志采用空白行的形式。

enter image description here

1 个答案:

答案 0 :(得分:0)

Firebase提供了值得关注的示例cloud function on Github - 它导入cors。它使用附加参数导入它们;

const cors = require('cors')({
  origin: true,
});

我还没有看到云函数使用module.exports - 这可能是有效的,但我还没有看到它,所以你的代码的重构看起来像这样;

const functions = require('firebase-functions');
const admin = require('firebase-admin');

// You don't need to import the JSON file - Firebase has it's creds stored in `functions.config().firebase`
admin.initializeApp(functions.config().firebase);

const cors = require('cors')({ origin: true });

exports.authCheck = functions.https.onRequest((req, res) => {
  return cors(req, res, () => {
    const tokenId = req.get('Authorization').split('Bearer ')[1];

    admin.auth().verifyIdToken(tokenId)
      .then((decoded) => {
        console.log('Decoded', decoded);
        res.status(200).send(decoded);
      })
      .catch((error) => {
        console.error('Catching Error', error);
        res.status(401).send(error)
      });
  });
});

如果你运行它有助于记录?