Firebase函数在一个Firebase项目中运行,但在另一个项目中出现内部错误



我有两个firebase帐户,一个用于开发(D(,另一个用于生产(p(。我的开发(D(firestore和功能在us-central1上运行。生产中(P(消防仓库位于亚洲南部1,功能在美国中央1 上运行

我的firebase函数在开发(D(中运行正常,但在生产中出现了以下错误。此外,当我检查firebase函数控制台上的日志时,似乎没有任何活动。看起来好像函数还没有被调用。

firebase函数返回的错误为:

函数调用错误2021年4月9日星期五09:25:32 GMT+0530(印度标准时间(,带有{"代码":"内部"}

此外,客户端还显示以下消息:

在'获取的访问权限https://us-central1-xxx.cloudfunctions.net/gpublish'来自原点'https://setmytest.com'已被CORS策略阻止:对飞行前请求的响应未通过访问控制检查:请求的资源上不存在"access control Allow Origin"标头。如果不透明响应满足您的需求,请将请求的模式设置为"无cors",以在禁用cors的情况下获取资源。区域常青.js:1052 POSThttps://us-central1-xxx.cloudfunctions.net/gpublishnet::ERR_FAILED

这是我的angular应用程序调用函数的代码

const process = this.fns.httpsCallable("gpublish");
process(data).subscribe(
(result) => {
console.log("function responded with result: " + JSON.stringify(result));
},
(err) => {
const date1 = new Date();
console.log("Function call error " + date1.toString() + "with" + JSON.stringify(err));
});

以下是功能-

index.ts

import { gpublish } from "./gpublish/gpublish";
import { sendEmail } from "./sendEmail";
export {gpublish,sendEmail };

gpublish.ts

import * as functions from "firebase-functions";
const fs = require("fs");
const { google } = require("googleapis");
const script = google.script("v1");
const scriptId = "SCRIPT_ID";
const googleAuth = require("google-auth-library");
import { admin } from "../admin";
const db = admin.firestore();
export const gpublish = functions.https.onCall(async (data: any, res: any) => {
try {
const googleTest = data.test;
console.log("Publishing to google test of name " + googleTest.testName);

// read the credentials and construct the oauth client
const content = await fs.readFileSync("gapi_credentials.json");
const credentials = JSON.parse(content); // load the credentials
const { client_secret, client_id, redirect_uris } = credentials.web;
const functionsOauth2Client = new googleAuth.OAuth2Client(client_id,client_secret, redirect_uris); // Constuct an auth client
functionsOauth2Client.setCredentials({refresh_token: credentials.refresh_token}); // Authorize a client with credentials
// run the script
return runScript(functionsOauth2Client,scriptId,JSON.stringify(googleTest)
).then((scriptData: any) => {
console.log("Script data is" + JSON.stringify(scriptData));
sendEmail(googleTest, scriptData);
return JSON.stringify(scriptData);
});
} catch (err) {
return JSON.stringify(err);
}
});
function runScript(auth: any, scriptid: string, test: any) {
return new Promise(function (resolve, reject) {
script.scripts
.run({auth: auth,scriptId: scriptid, resource: {function: "doGet", devMode: true,parameters: test }
})
.then((respons: any) => { resolve(respons.data);})
.catch((error: any) => {reject(error);});
});
}

在开发和生产中部署功能时,我已正确更改了服务帐户密钥和谷歌凭据。

我尝试了很多东西,包括以下内容:

  • 在Firebase的云功能中启用CORS
  • 谷歌云功能启用CORS

该功能在开发firebase项目中运行良好,但在生产firebase项目没有。请帮忙!

您需要检查您的函数是否已正确部署。

不存在的函数(404 Not Found(或无法访问的函数(403 Forbidden(都会出现错误,因为Firebase函数从未执行过,这意味着正确的CORS标头从未发送回客户端。

相关内容

  • 没有找到相关文章

最新更新