我在 Django 网络应用程序中使用 Google Speech API。我已经为其设置了一个服务帐户,并且能够在本地进行 API 调用。我已将本地 GOOGLE_APPLICATION_CREDENTIALS
环境变量指向包含所有凭据的服务帐户的 json 文件。
我尝试通过运行设置heroku的GOOGLE_APPLICATION_CREDENTIALS
环境变量
$ heroku config:set GOOGLE_APPLICATION_CREDENTIALS="$(< myProjCreds.json)"
$ heroku config
GOOGLE_APPLICATION_CREDENTIALS: {
^^ 它在 json 文件中第一次出现 "
时终止,紧接在 {
之后
和
$ heroku config:set GOOGLE_APPLICATION_CREDENTIALS='$(< myProjCreds.json)'
$ heroku config
GOOGLE_APPLICATION_CREDENTIALS: $(< myProjCreds.json)
^^ 命令被保存到环境变量中
我尝试将heroku的GOOGLE_APPLICATION_CREDENTIALS
环境变量设置为服务帐户的json文件的内容,但它不起作用(因为显然这个变量的值需要是json的绝对路径文件) 。我找到了一种无需加载 json 帐户即可授权开发者帐户的方法,而是使用 GOOGLE_ACCOUNT_TYPE
、GOOGLE_CLIENT_EMAIL
和 GOOGLE_PRIVATE_KEY
。 Here是它的 GitHub 讨论页面。
我想要为我的 Django Web 应用程序提供类似(或不同)的内容,并且出于安全原因,我希望避免将 json 文件上传到我的 Django Web 应用程序的目录(如果可能)。
最佳答案
根据您使用哪个库与 Speech API 通信,您可以使用多种方法:
您可以使用 base64 或类似的方式序列化 JSON 数据,并将结果字符串设置为一个环境变量。在应用程序启动期间,您可以解码此数据并适当配置您的客户端库。
您可以将凭证文件中的每一对设置为单独的环境变量并相应地使用它们。也许您正在使用的库支持使用
GOOGLE_ACCOUNT_TYPE
、GOOGLE_CLIENT_EMAIL
和GOOGLE_PRIVATE_KEY
进行身份验证,类似于您链接到的 ruby 客户端。
编辑: 假设您使用的是google官方客户端库,您有多种选项来验证您的请求,包括您正在使用的(服务帐户):https://googlecloudplatform.github.io/google-cloud-python/latest/core/auth.html您可以将凭据保存到临时文件并将其路径传递给客户端对象 https://google-auth.readthedocs.io/en/latest/user-guide.html#service-account-private-key-files (但在我看来,这是一个非常hacky的解决方法)。您还可以使用其他几个身份验证选项。
编辑2: 我发现了另一个具有更强大方法的链接 http://codrspace.com/gargath/using-google-auth-apis-on-heroku/ 。有 ruby 代码,但您肯定可以在 Python 中执行类似的操作。
关于django - 将 JSON 文件内容加载到 Heroku 环境变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48855006/