我刚刚升级到使用Firebase云功能v1.x.根据{{3}}
可调用函数与HTTP函数
完全相同
考虑到这一点,我试图转换我的1.x之前的模拟代码:
export const myHttpAction = functions.https.onRequest((req, res) => {
try {
const result = await myHttpActionWorker(req.body);
return res.send({ status: 'OK' });
} catch (err) {
console.error(err);
return res.status(500).send({ status: 'Server error' });
}
});
以下内容:
export const myHttpAction = functions.https.onCall(async (data, context) => {
console.log(context.auth);
try {
const result = await myHttpActionWorker(data);
return { status: 'OK' };
} catch (err) {
console.error(err);
return { status: 'Server error' };
}
});
但是在提交到我的终端/myHttpAction
时,使用我在1.x之前使用的相同数据,我得到以下回复:
{
"error": {
"status": "INVALID_ARGUMENT",
"message": "Bad Request"
}
}
我不确定为什么请求是“坏”,因为它完全相同,并且Callable函数“完全相同”。知道是什么给出了什么?
我的package.json指定"firebase-functions": "^1.0.1"
。
答案 0 :(得分:2)
你误解了“完全相同”的含义(并省略了答案的全部内容!)。它们在安全性方面是相同的(正如原始问题所要求的那样),因为可调用函数是一个HTTP函数,在可调用客户端SDK管理的幕后有额外的东西。答案列出了这些差异。这些差异对安全性没有任何影响。但是你不能简单地在一个HTTP函数的callable中交换,并期望现有的调用者的一切都是相同的。
如果要在不使用客户端SDK的情况下调用可调用函数,则必须遵循其协议规范。关于它的文档即将发布,但您可以在这里获得基础知识: