当前位置: 首页 > 知识库问答 >
问题:

使用google cloud任务调用firestore函数时的“permission_dention:缺少或不充分的权限”

昝晗昱
2023-03-14
const functions = require("firebase-functions");

const admin = require('firebase-admin');
admin.initializeApp();

exports.addMessage = functions.https.onRequest(async (req, res) => {
    const original = 'dhara';
    const writeResult = await admin.firestore().collection('messages').add({original: original});
    res.json({result: `Message with ID: ${writeResult.id} added.`});
});
gcloud tasks queues create auction-autobid-queue

然后创建了谷歌云任务。

const serviceAccount = require('./my-service-account.json');

const {CloudTasksClient} = require('@google-cloud/tasks');

const client = new CloudTasksClient({
  credentials: serviceAccount
});

async function createTask() {
     const project = 'my-project';
     const queue = 'auction-autobid-queue';
     const location = 'europe-west1';
     const payload = 'Hello, World!';
     const serviceAccountEmail = "my-name@my-project.iam.gserviceaccount.com";
      const parent = client.queuePath(project, location, queue);
  
    const task = {
      httpRequest: {
        httpMethod: 'GET',
        url: 'https://us-central1-my-project.cloudfunctions.net/addMessage',
        oidcToken: {
          serviceAccountEmail,
        },
      },
    };
  
    const inSeconds = 60;
    if (inSeconds) {
     task.scheduleTime = {
        seconds: inSeconds + Date.now() / 1000
      };
    }
  
    console.log('Sending task:');
    console.log(task);
    const request = {parent, task};
    const [response] = await client.createTask(request);
    const name = response.name;
    console.log(`Created task ${name}`);
  }

  process.on('unhandledRejection', err => {
    console.error(err.message);
    process.exitCode = 1;
  });

  createTask();

我将此任务添加到队列中。现在,当我从Google云控制台运行这个任务时,它会抛出错误。我签入了firebase函数日志,我可以看到函数被调用,但它扔给了我

错误:7 permission_denied:缺少权限或权限不足。

我有一个服务帐户,它有云功能开发人员云功能服务代理所有者角色。

我不知道这里的问题是什么,因为分配的角色很好。

共有1个答案

柴嘉石
2023-03-14
const admin = require("firebase-admin");
const serviceAccount = require("./myServiceKey.json");

const firebase = admin.initializeApp({
   credential: admin.credential.cert(serviceAccount)
});
const firestore = firebase.firestore();

exports.addMessage = functions.https.onRequest(async (req, res) => {
    const original = 'dhara';
    const writeResult = await firestore().collection('messages').add({original: original});
    res.json({result: `Message with ID: ${writeResult.id} added.`});
});
 类似资料:
  • 这在当地如预期的那样工作。部署时,会出现以下错误: 我的functions/package.json文件是: 我搜索这个错误的唯一链接是这个未回答的问题:PERMISSION_DENIED Firestore CloudFunction TypeScript 我已经设置了我的Firestore规则,允许任何人也可以读写,即使上面使用的是管理,但它仍然不起作用。 有人能帮忙吗?

  • 我在自学firestore,我想不出一种方法,只允许用户更新、删除或阅读他们添加的集合。 我使用firebase auth进行用户处理。对于每个集合,我将作为保存在数据库中。 这是我的规矩 当我试图读取/获取数据时,我得到错误。 我正在使用firestore的web api(JavaScript)。这是我用来读取数据的代码。

  • 我使用的是Role(允许读,写:如果request.auth.uid!=null),当我登录时,我得到的数据是ok的,但当我注销用户时,我得到的错误是:缺少或不充分的权限。首先,我认为这是因为我没有取消订阅我尝试的可观察的(rxjs/operator/takewhile)即使我使用异步管道,我也得到了同样的错误。

  • 我的账户仍然在免费计划中,我在日志中得到了一个通知,即我应该配置计费账户,但如果理解文档正确,我应该能够访问谷歌云平台中的服务,因此读取同一数据库中的其他节点应该不成问题。 我已经在stackoverflow上发现了两个类似的问题,但没有找到解决方案。也许其他人在此期间也面临这个问题,并能够解决它? PERMISSION_DENIED Firestore CloudFunction通过函数“7 P

  • 我有以下规则: 所以基本上,我希望经过身份验证的用户能够读/写和集合。但当我创建一个用户并登录时,我会尝试写: 但我有一个错误: 不知道我做错了什么。任何帮助都将不胜感激——谢谢!

  • 我编写了一些与默认规则完美配合的代码。代码如下: 但如果我用这些规则 我明白了 我做错了什么?