Firebase 函数 HTTPS 403 禁止

Gij*_*kom 13 node.js express firebase google-cloud-functions

我使用 Node 和 Express 构建了一个 Firebase HTTP 事件函数。该函数正在运行,但是当我在客户端调用该函数时,我得到403 Forbidden. 第一次调用该函数时,我被要求使用 Google 帐户登录。我使用与 Firebase 相同的帐户登录,但是当我调用该函数时,我得到了:

403错误截图

我查看了谷歌云平台上的use角色,调用该函数的权限设置为allUsers. 我在 Firebase CLI 中退出并重新登录。

这是index.jsfunctions文件夹中的:

const functions = require('firebase-functions');
const express = require('express');
const app = express();
const bodyParser = require('body-parser');
const port = process.env.port || 5600
const nodemailer = require('nodemailer');

app.use(express.static('Public'));

app.use(bodyParser.urlencoded({ extended: true }));

const urlencodedParser = bodyParser.urlencoded({extended: true});

app.post("/api/user", urlencodedParser, (req, res) => {
  res.sendFile('../Public/bedankt.html', {root: __dirname})
  const persGegevens = req.body

  const string = JSON.stringify(persGegevens, (key, value) => {
    if (typeof value === "string"){
      return value.toUpperCase();
    } else {
      return value
    }
  }, 1);

  var transporter = nodemailer.createTransport({
    service: 'gmail',
    auth: {
      user: 'gietvloermakers@gmail.com',
      pass: 'Gietvloermakers2020!'
    }
  });

  var mailOptions = {
    from: 'gietvloermakers@gmail.com',
    to: 'gvbeusekom84@hotmail.com',
    subject: 'Nieuwe bestelling op Gietvloermakers',
    html: string
  };

  transporter.sendMail(mailOptions, function(error, info){
    if (error) {
      console.log(error);
    } else {
      console.log('Email sent: ' + info.response);
    }
  });
});

exports.app1 = functions.https.onRequest(app);

app.listen(port);

console.log(port);
Run Code Online (Sandbox Code Playgroud)

这是html:

<form id="controlleer-form" action="/api/user" method="post" enctype="application/x-www-form-urlencoded">
    <div class="controleer-div">
        <h2>Uw bestelling</h2>
        <p>Aantal m2</p>
        <input class="controle-input" type="text" name="aantalM2" id="aantalM2" readonly>
        <p>Kleur</p>
        <input class="controle-input" type="text" name="kleur" id="kleur" readonly>
        <p>Assistentie</p>
        <input class="controle-input" type="text" name="assistentie" id="assistentie" readonly>
        <p>Gereedschappen</p>
        <input class="controle-input" type="text" name="gereedschappen" id="gereedschappen" readonly>
        <p>Totale prijs</p>
        <input  class="controle-input" type="text" name="totale-prijs" id="totale-prijs" readonly>
        <a href="bestellen.html"><p id="andere-kleur">Bestelling aanpassen</p></a>
    </div>
    <div class="controleer-div">
        <h2>Uw gegevens</h2>
        <p>Voornaam</p>
        <input type="text" name="voornaam" placeholder="Voornaam">
        <p>Achternaam</p>
        <input type="text" name="Achternaam" placeholder="Achternaam">
        <p>Straatnaam en huisnummer</p>
        <input type="text" name="Achternaam" placeholder="Straatnaam en huisnummer">
        <p>Postcode</p>
        <input type="text" name="Achternaam" placeholder="Postcode">
        <p>Telefoonnummer</p>
        <input type="tel" name="telefoonnummer" placeholder="Telefoonnummer">
        <p>Emailadres</p>
        <input type="email" name="email" placeholder="Emailadres"><br>
        <input id="verzenden" type="submit"> 
    </div>
</form>
Run Code Online (Sandbox Code Playgroud)

这是 firebase.json:

{
  "hosting": {
    "public": "Public",
    "ignore": [
      "firebase.json",
      "**/.*",
      "**/node_modules/**"
    ],
    "rewrites": [{
      "source": "**",
      "function": "app1"
    }]
  }
}
Run Code Online (Sandbox Code Playgroud)

我试过了,但到目前为止我已经用尽了我在网上找到的所有可能的解决方案。

小智 29

我最近遇到了这个。事实证明,截至 2020 年 1 月 15 日,新功能默认需要身份验证。

有关详细信息,请参阅此处的文档

解决方案是在 Google Cloud Console 的 Cloud Functions 页面中手动Cloud Functions InvokerallUsers用户添加权限。

  • 对我来说也是如此,默认添加规则,但仍然无法访问该功能。Google firebase 需要处理他们的文档 (2认同)

Uda*_*n K 21

如果您收到如下所示的 403 禁止错误

错误:禁止 您的客户端无权从此服务器获取 URL /api/test。

请按照以下步骤向所有用户授予访问权限。基本上,这是为了允许未经身份验证的客户端访问您的 api 端点。

就是这样,现在测试你的 api。


小智 6

这与访问您的云函数 http 请求和云函数事件的权限有关,您需要编辑您的云函数 IAM 权限。

https://cloud.google.com/functions/docs/securing/managing-access-iam#allowing_unauthenticated_function_invocation