【问题标题】:Missing API key for Google Cloud缺少 Google Cloud 的 API 密钥
【发布时间】:2019-02-11 01:30:26
【问题描述】:

我正在尝试将 Google's Natural Language API 用于 PHP,并按照说明进行操作,但在我编写的应用程序中出现错误:

致命错误:未捕获的 Google\Cloud\Core\Exception\ServiceException:{ "error": { "code": 403, "message": "请求缺少有效的 API key.", "status": "PERMISSION_DENIED" } }

我已下载帐户密钥文件,运行导出,但出现 403 错误。

我在项目文件夹中创建了指向文件的符号链接,运行导出,但出现 403 错误。

我将导出文件放在“.bash_profile”文件中,退出了终端会话,但出现 403 错误。

通过设置为您的应用程序代码提供身份验证凭据 环境变量 GOOGLE_APPLICATION_CREDENTIALS。代替 [PATH] 包含您的服务的 JSON 文件的文件路径 帐户密钥和带有文件名的 [FILE_NAME]。 仅此变量 适用于您当前的 shell 会话,因此如果您打开一个新会话, 再次设置变量

当我运行时:echo $GOOGLE_APPLICATION_CREDENTIALS 导出不存在,所以我再次运行它,但出现 403 错误。

我完全按照文档进行操作,我已经浏览了 3 次,每次都收到相同的 403 错误。

我没有看到要求我在应用程序中存储 API 密钥的字符串值的说明,但我发现很多人建议这样做,但没有提供如何或在何处提供示例。

所以,欢迎提出一些建议!

【问题讨论】:

    标签: php google-cloud-platform


    【解决方案1】:

    不要使用导出;而你的 ~/.bashrc 不是 apache 的 .bashrc

    但是将文件的路径直接添加到PHP代码中;例如。变成config.php

    使用putenv('GOOGLE_APPLICATION_CREDENTIALS=/var/www/[FILE_NAME].json');

    同时使用.htaccess 阻止对该文件的 HTTP 访问。

    甚至可以设置.htaccess,类似

    SetEnv GOOGLE_APPLICATION_CREDENTIALS "/var/www/[FILE_NAME].json"
    

    【讨论】:

    • 嗨马丁,“.htaccess”什么也没做,但“config.php”做了,但这是另一个错误:“致命错误:未捕获的 DomainException:无法读取 GOOGLE_APPLICATION_CREDENTIALS 指定的凭据文件: /path/vendor/google/auth/src/CredentialsLoader.php:73 中不存在文件路径/name.json” 奇怪的是,我得到了相同的错误,即 SymLink 的相对路径和实际的绝对路径文件。
    • @WayneSmallman .htaccess 文件可能位于错误位置;并且当直接引用文件时,该路径应该是从顶部/ 开始的绝对路径或相对于CredentialsLoader.php 或可能相对于访问它的脚本的位置。符号链接通常仅在使用 Options +FollowSymLinks 启用它们时才起作用。同样,当它完全位于 web-root 之外时,由于“open basedir”限制,这通常不起作用。
    • “.htaccess”是正确的;应用程序正在使用它。此外,顶部是:Options +FollowSymlinks。我用根目录的绝对路径再次尝试了该指令,但它仍然无法识别它。我在“config.php”中尝试了相同的路径,这给了我原来的错误。
    • 我在 API 密钥文件名中发现了一个应该是“-”的空格,现在它可以工作了。马丁,谢谢。
    • @WayneSmallman Linux 需要路径中的空格用反斜杠转义。
    猜你喜欢
    • 2018-11-07
    • 1970-01-01
    • 2017-03-09
    • 1970-01-01
    • 1970-01-01
    • 2016-09-16
    • 2016-08-29
    • 2019-09-30
    • 2021-06-14
    相关资源
    最近更新 更多