Javascript 错误:7权限被拒绝:您的应用程序已使用来自Google Cloud SDK的最终用户凭据进行身份验证

Javascript 错误:7权限被拒绝:您的应用程序已使用来自Google Cloud SDK的最终用户凭据进行身份验证,javascript,sockets,oauth,gcloud,google-speech-api,Javascript,Sockets,Oauth,Gcloud,Google Speech Api,几个月前,我的websocket服务器内部没有代码更改,但现在使用它,Google speech to text api似乎不再允许使用访问令牌进行身份验证 这是我以前的工作方法,直到今天我遇到这个错误 const client = new speech.SpeechClient({ access_token: ACCESS_TOKEN, projectId: 'project-name' }); 这使我明白了标题中的上述错误 我还尝试通过如下设置环境来切换到服务帐户(我过去使用过

几个月前,我的websocket服务器内部没有代码更改,但现在使用它,Google speech to text api似乎不再允许使用访问令牌进行身份验证

这是我以前的工作方法,直到今天我遇到这个错误

const client = new speech.SpeechClient({
   access_token: ACCESS_TOKEN,
   projectId: 'project-name'
});
这使我明白了标题中的上述错误

我还尝试通过如下设置环境来切换到服务帐户(我过去使用过)

export GOOGLE_APPLICATION_CREDENTIALS="path-to-key.json"
然后,我在不使用上述代码的情况下运行客户端,而是运行:

const client = new speech.SpeechClient();
这让我明白了这个美丽的错误,即使环境是用项目Id设置的

Error: Unable to detect a Project Id in the current environment.
如果您能帮助解决此问题,我们将不胜感激

我能够遵循官方的快速入门,并通过使用客户端库使其正常工作,没有任何问题。我将在下面解释我所做的。

来自

  • 创建或选择项目:

    gcloud config设置项目您的项目名称

  • 为当前项目启用云语音到文本API:

    gcloud服务启用speech.googleapis.com

  • 创建服务帐户:

    gcloud iam服务帐户创建[SA-NAME]\
    --说明“[SA-说明]”\
    --显示名称“[SA-display-name]”

  • 将私钥作为JSON下载:

    gcloud iam服务帐户密钥创建~/key.json\
    --iam帐户[SA-NAME]@[PROJECT-ID]。iam.gserviceaccount.com

  • 将环境变量
    GOOGLE\u APPLICATION\u CREDENTIALS
    设置为包含服务帐户密钥的JSON文件的文件路径:

    export GOOGLE\u APPLICATION\u CREDENTIALS=“[PATH]”


  • 安装客户端库

    npm安装--save@googlecloud/speech

  • 创建了一个
    quickstart.js
    文件,并将以下代码示例放入其中:

    “严格使用”

    /[START speech\u quickstart]
    异步函数main(){
    //导入Google云客户端库
    const speech=require(“@googlecloud/speech”);
    常量fs=require('fs');

    //创建一个客户端
    const client=new speech.SpeechClient();

    //要转录的音频文件的名称
    常量文件名='。/resources/audio.raw';

    //读取本地音频文件并将其转换为base64
    const file=fs.readFileSync(文件名);
    const audioBytes=file.toString('base64');

    //音频文件的编码、以赫兹为单位的采样率和BCP-47语言代码
    常量音频={
    内容:音频字节,
    };
    常量配置={
    编码:“LINEAR16”,
    赫兹:16000,
    语言代码:“en US”,
    };
    常量请求={
    音频:音频,
    config:config,
    };

    //检测音频文件中的语音
    const[response]=等待客户端识别(请求);
    常量转录=响应。结果
    .map(result=>result.alternations[0]。转录本)
    .join('\n');
    log(“translation:${translation}”);
    }
    main().catch(console.error)

  • 其中
    constfilename='。/resources/audio.raw'
    是test.raw音频所在的路径

    我能够遵循官方的快速入门,并通过使用客户端库使其正常工作,没有任何问题。我将在下面解释我所做的。

    来自

  • 创建或选择项目:

    gcloud config设置项目您的项目名称

  • 为当前项目启用云语音到文本API:

    gcloud服务启用speech.googleapis.com

  • 创建服务帐户:

    gcloud iam服务帐户创建[SA-NAME]\
    --说明“[SA-说明]”\
    --显示名称“[SA-display-name]”

  • 将私钥作为JSON下载:

    gcloud iam服务帐户密钥创建~/key.json\
    --iam帐户[SA-NAME]@[PROJECT-ID]。iam.gserviceaccount.com

  • 将环境变量
    GOOGLE\u APPLICATION\u CREDENTIALS
    设置为包含服务帐户密钥的JSON文件的文件路径:

    export GOOGLE\u APPLICATION\u CREDENTIALS=“[PATH]”


  • 安装客户端库

    npm安装--save@googlecloud/speech

  • 创建了一个
    quickstart.js
    文件,并将以下代码示例放入其中:

    “严格使用”

    /[START speech\u quickstart]
    异步函数main(){
    //导入Google云客户端库
    const speech=require(“@googlecloud/speech”);
    常量fs=require('fs');

    //创建一个客户端
    const client=new speech.SpeechClient();

    //要转录的音频文件的名称
    常量文件名='。/resources/audio.raw';

    //读取本地音频文件并将其转换为base64
    const file=fs.readFileSync(文件名);
    const audioBytes=file.toString('base64');

    //音频文件的编码、以赫兹为单位的采样率和BCP-47语言代码
    常量音频={
    内容:音频字节,
    };
    常量配置={
    编码:“LINEAR16”,
    赫兹:16000,
    语言代码:“en US”,
    };
    常量请求={
    音频:音频,
    config:config,
    };

    //检测音频文件中的语音
    const[response]=等待客户端识别(请求);
    常量转录=响应。结果
    .map(result=>result.alternations[0]。转录本)
    .join('\n');
    log(“translation:${translation}”);
    }
    main().catch(console.error)

  • 其中
    constfilename='。/resources/audio.raw'
    是test.raw音频所在的路径

    我决心
    const options = {
      keyFilename: 'path-to-key.json',
      projectId: 'project-name',
    };
    
    const client = new speech.SpeechClient(options);