Node.js云视觉API PERMISSION_DENIED错误的项目#

时间:2018-09-09 23:39:27

标签: node.js google-vision google-cloud-vision

当我尝试使用cloud vision API运行firebase函数并测试这些功能时。我收到此错误:

  

错误:{错误:7 PERMISSION_DENIED:尚未安装Cloud Vision API   在项目563584335869中使用之前,或已禁用。通过启用它   来访   https://console.developers.google.com/apis/api/vision.googleapis.com/overview?project=563584335869   然后重试。如果您最近启用了此API,请等待几分钟   传播到我们的系统并重试的操作。

我无法识别此项目编号,并且已经使用我正在使用的项目启用了API。我使用已启用API的项目设置了GOOGLE_APPLICATION_CREDENTIALS。我做错了什么事?

3 个答案:

答案 0 :(得分:1)

通常由于多种原因(例如文件丢失,凭据路径无效,环境变量分配不正确)等原因而未正确认证时引发此错误消息。

基于此,我建议您验证凭据文件和文件路径的正确分配,并遵循Obtaining and providing service account credentials manually指南以明确指定服务帐户文件直接进入您的代码;这样,您将能够永久设置它,并验证您是否正确传递了服务凭据。此外,您可以查看this link,其中包含有用的逐步指南,可将Firebase功能与Vision API结合使用,其中包括Node.js的Vision对象身份验证代码。

在代码示例中将路径传递到服务帐户密钥:

// Imports the Google Cloud client library.
const Storage = require('@google-cloud/storage');

// Instantiates a client. Explicitly use service account credentials by
// specifying the private key file. All clients in google-cloud-node have this
// helper, see https://github.com/GoogleCloudPlatform/google-cloud-node/blob/master/docs/authentication.md
const storage = new Storage({
  keyFilename: '/path/to/keyfile.json'
});

// Makes an authenticated API request.
storage
  .getBuckets()
  .then((results) => {
    const buckets = results[0];

    console.log('Buckets:');
    buckets.forEach((bucket) => {
      console.log(bucket.name);
    });
  })
  .catch((err) => {
    console.error('ERROR:', err);
  });

答案 1 :(得分:1)

对于那些仍然遇到此问题的人来说,对我有用的是

const client = new vision.ImageAnnotatorClient({
            keyFilename: 'serviceAccountKey.json'
          })

答案 2 :(得分:0)

API has not been used in project 563584335869

如果您单击该链接已在控制台中打印出来,它将引导您进入该URL。 https://console.developers.google.com/apis/api/vision.googleapis.com/overview?project=firebase-cli

因此,该项目ID表示您使用的是'firebase-cli'的项目证书,而不是您的

如果您尝试设置环境的值,则可以在目录中找到变量

~/.config/firebase/...credentials.json

有时您尝试覆盖后将不会替换它。

但是,您可以在代码中设置凭据。

您可以在此处找到获取证书的方法。 https://cloud.google.com/iam/docs/creating-managing-service-account-keys

凭据格式就是这样。

{
  "type": "service_account",
  "project_id": 
  "private_key_id": 
  "private_key": 
  "client_email":
  "client_id":
  "auth_uri": 
  "token_uri": 
  "auth_provider_x509_cert_url": 
  "client_x509_cert_url": 
}

当我使用另一个Google API时,遇到了与您完全相同的错误。并解决了包括凭据内部代码在内的问题。

const textToSpeech = require("@google-cloud/text-to-speech")
const keyfile = require(".././my-project.json")
const config = {
  projectId: keyfile.project_id,
  keyFilename: require.resolve(".././my-project.json")
};
const TTS_Client = new textToSpeech.TextToSpeechClient(config)