如何确保仅通过HTTPS调用HTTP触发器?

时间:2019-07-05 19:20:23

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

我正在使用NodeJS和Express(Firebase)在Cloud Functions上构建API,并且我只想接受通过HTTP进行的调用,因此通过纯HTTP进行的调用将失败。 有可能做到吗?

2 个答案:

答案 0 :(得分:1)

通常,您希望针对每种协议运行的应用程序侦听不同的端口。要解决您的问题,您可以简单地忽略对http实例的请求,或将每个http请求重定向到https请求。

这是一个中间件:

app.use(function(request, response){
  if(!request.secure){
    response.redirect("https://" + request.headers.host + request.url);
  }
});

参见快递documentation

答案 1 :(得分:1)

您应该检查传递给函数的请求对象。这将是一个Express类型的Request对象。请求具有名为protocol的属性,应为“ https”。所以:

functions.https.onRequest((req, res) => {
    if (req.protocol !== "https") {
        // reject the request
        res.sendStatus(403)
    }
})