代码之家  ›  专栏  ›  技术社区  ›  fstr

通过函数写入FireStore时发生FireBase错误:“7权限被拒绝:权限缺失或不足”

  •  2
  • fstr  · 技术社区  · 6 年前

    我正在尝试编写一个简单的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)
    

    我的函数/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规则,允许任何人也可以读写,即使上面使用的是admin,但它仍然不起作用。

    有人能帮忙吗?

    1 回复  |  直到 6 年前
        1
  •  2
  •   fstr    6 年前

    我联系了FireBase支持部门,他们也不知道发生了什么。我创建了一个新的项目,部署了它,它工作了。也许这只是新项目的一个奇怪的小故障。