gpt4 book ai didi

typescript - Firebase 通过函数 : "7 PERMISSION_DENIED: Missing or insufficient permissions" 写入 Firestore 时出错

转载 作者:搜寻专家 更新时间:2023-10-30 21:36:37 24 4
gpt4 key购买 nike

我正在尝试编写一个简单的 Firebase 函数,使用 TypeScript 向 Firestore 添加一条记录。代码的缩减版本是:

import * as admin from "firebase-admin";
import * as functions from "firebase-functions";

const config = functions.config();

admin.initializeApp(functions.config().firebase);
admin.database.enableLogging(true);

exports.subscriptions = functions.https.onRequest(
async (req, res) => {
try {
const requestSubscription = req.body;
const subscription = {
subscription_id: requestSubscription.subscription_id,
email: requestSubscription.email || ""
};

const id = subscription.subscription_id;
const dbSubscriptions = admin.firestore().collection("subscriptions");
await dbSubscriptions.doc(id).set(subscription);

return res.status(200).send(`Success`);
} catch (e) {
console.error(e.stack);
return res.status(500).send(`Error`);
}
}
);

这在本地按预期工作。部署时,出现此错误:

Error: 7 PERMISSION_DENIED: Missing or insufficient permissions.
at Object.exports.createStatusError (/user_code/node_modules/firebase-admin/node_modules/grpc/src/common.js:87:15)
at Object.onReceiveStatus (/user_code/node_modules/firebase-admin/node_modules/grpc/src/client_interceptors.js:1214:28)
at InterceptingListener._callNext (/user_code/node_modules/firebase-admin/node_modules/grpc/src/client_interceptors.js:590:42)
at InterceptingListener.onReceiveStatus (/user_code/node_modules/firebase-admin/node_modules/grpc/src/client_interceptors.js:640:8)
at callback (/user_code/node_modules/firebase-admin/node_modules/grpc/src/client_interceptors.js:867:24)

我的 functions/package.json 文件是:

{
"name": "functions",
"scripts": {
"lint": "tslint --project tsconfig.json",
"build": "tsc",
"serve": "npm run build && firebase serve --only functions",
"shell": "npm run build && firebase functions:shell",
"start": "npm run shell",
"deploy": "firebase deploy --only functions",
"logs": "firebase functions:log"
},
"main": "lib/index.js",
"dependencies": {
"express": "4.16.3",
"firebase-admin": "5.12.1",
"firebase-functions": "1.0.3"
},
"devDependencies": {
"tslint": "^5.8.0",
"typescript": "^2.5.3"
},
"private": true
}

我正在搜索此错误的唯一链接是这个未回答的问题: PERMISSION_DENIED Firestore CloudFunction TypeScript

我已经将我的 Firestore 规则设置为允许任何人读写,即使上面使用的是管理员,但它仍然不起作用。

有人能帮忙吗?

最佳答案

我在更新我的 IAM/服务账户值时遇到了这个问题,我想我已经解决了。

如果您使用 Firebase Admin SDK 而未在 Firebase 函数中提供任何凭据,例如 firebaseAdmin.initializeApp(),那么您的函数将使用默认的应用程序凭据。

默认凭据使用以下服务帐户 {project-id}@appspot.gserviceaccount.com 其中 {project-id} 将是您的 firebase/google 云项目ID。当您创建 Firebase 项目或使用少量谷歌云服务时,通常会自动创建此帐户。

无论如何,{project-id}@appspot.gserviceaccount.com 默认具有 Editor 级别的权限。您可以在 [Google Cloud - IAM & Admin - IAM] 页面中查看。我认为它有太多权限,所以我基本上从服务帐户中删除了该权限,并决定手动添加更多限制性权限。 (当时不知道firebase/cloud functions用的是这个服务账号。

进行这些更改后,我访问 Firestore 的函数很快开始遇到 Error: 7 PERMISSION_DENIED: Missing or insufficient permissions. 错误。为了解决这个问题,我不得不做以下两件事。

  • Editor 级别权限添加回默认服务帐户。
  • 完全使用 Firebase 控制台删除 Firestore 功能,并使用 firebase deploy --only functions 命令重新部署它们。

完成上述 2 个步骤后,我的云功能开始按预期正常工作。

关于typescript - Firebase 通过函数 : "7 PERMISSION_DENIED: Missing or insufficient permissions" 写入 Firestore 时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50489491/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com