Firebase托管重写为无法按预期运行的功能

时间:2019-06-27 09:59:24

标签: firebase google-cloud-functions firebase-hosting

我正在使用HTML,CSS和JS构建静态网站,并托管在Firebase托管上,并连接了自定义域。我唯一需要的服务器端功能是从联系表发送邮件。为此,我正在尝试使用Firebase云功能。我已经在同一项目上初始化了函数,并尝试使用Firebase托管重写将对mydomain.com/contact的请求重写为contact函数。但是,当我尝试在浏览器中访问mydomain.com/contact时,它显示以下403 Forbidden错误消息。

Error: Forbidden
Your client does not have permission to get URL /contact/contact from this server.

firebase.json

{
  "hosting": {
    "public": "build",
    "rewrites": [{
      "source": "/contact",
      "function": "contact"
    }],
    "ignore": [
      "firebase.json",
      "**/.*",
      "**/node_modules/**"
    ]
  },
  "functions": {
    "predeploy": [
      "npm --prefix \"$RESOURCE_DIR\" run lint",
      "npm --prefix \"$RESOURCE_DIR\" run build"
    ]
  }
}

云功能(未实现实际逻辑)

import * as functions from 'firebase-functions';

exports.contact = functions.https.onRequest((request, response) => {
    response.send("<h1>Contact<h1>");
});

我正在使用Firebase火花计划。

2 个答案:

答案 0 :(得分:1)

这对我有用:

"rewrites": [
    {
      "source": "**",
      "function": "myApp"
    }
  ]

在Express函数中,

import * as functions from 'firebase-functions';
import express from 'express';
const app = express();

app.get('/contact', (req, res) => {
  res.send("<h1>Contact<h1>");
};

export const myApp = functions.https.onRequest(app);

答案 1 :(得分:0)

这周我遇到了同样的问题。我从/ user重写为一个名为user的函数,并且得到了响应Your client does not have permission to get URL /user/user from this server.

我刚刚从Firebase控制台删除了这些功能,然后再次部署了它们,现在它们可以工作了。部署这样的功能和/或使用托管重写时,偶尔会出现一些错误,其中重写路径会附加到服务器上的函数url路径。