我在我的 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 时,云函数总是超时。我无法调试问题是什么,因为控制台中的日志是空行的形式。
最佳答案
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)
});
});
});
如果你运行它对日志记录有帮助吗?
关于node.js - 为什么 Cloud Functions 日志消息为空?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49506107/