【发布时间】:2015-09-25 21:05:03
【问题描述】:
我正在使用 google appengine、node.js 和 socket.io 构建一个 webapp,我目前正在尝试设置一个 google 计算实例以使用这个 tutorial 之后的 google 云数据存储 api。到目前为止,我已经完成了第 1 步和第 2 步,但是在本地运行下载的 adams.js 文件时,我得到了这个:
Error: No access or refresh token is set.
我试过的东西:
- gcloud auth login (这会将我登录到谷歌,但不会在本地设置我的令牌)
- 更改我将 DATASTORE_SERVICE_ACCOUNT 和 DATASTORE_PRIVATE_KEY_FILE 值导出为字符串、纯文本等的方式。
- 在出错前将我的凭据记录在行中(我肯定缺少令牌)
- 创建新的服务帐户并再次执行密钥创建步骤
- 跑了 curl "http://metadata/computeMetadata/v1/instance/service-accounts/default/token" -D "Metadata-Flavor: Google" 以获取更多信息。
那个命令给了我这个:
<html>
<head><title>301 Moved Permanently</title></head>
<body bgcolor="white">
<center><h1>301 Moved Permanently</h1></center>
<hr><center>nginx</center>
</body>
</html>
所以我肯定错过了一个令牌,但由于某种原因,我无法弄清楚我应该如何得到它。或者当我的应用程序部署并想要在线访问 API 时,我需要将它存储在哪里。感觉这应该是一件很容易找到的事情,但由于某种原因,我正在阅读的所有文档都让我陷入困境。任何帮助都会很棒。
【问题讨论】:
-
您能否通过 SSH 连接到您的 Compute Engine 实例并尝试运行: curl "metadata/computeMetadata/v1/instance/service-accounts/default/…" -H "Metadata-Flavor: Google"(使用“-H”而不是“-D”)
-
当然,这给了我这个:
https://www.googleapis.com/auth/datastorehttps://www.googleapis.com/auth/userinfo.email -
很好——您的 GCE 实例设置了正确的范围。因此,您不需要环境变量(您可以使用
unset DATASTORE_SERVICE_ACCOUNT和unset DATASTORE_PRIVATE_KEY_FILE)。您在 GCE 实例上运行 adams.js 演示所使用的命令是什么,您得到了什么错误? -
@EdDavisson 哇,这正好解释了我的问题,谢谢!我以为我应该在本地运行这段代码——而不是从 GCE 实例中运行。这为我解决了一个巨大的问题。它现在正在工作。
-
很高兴它有帮助!我在答案中总结了这一点。
标签: node.js google-app-engine google-compute-engine access-token google-cloud-datastore