【发布时间】:2020-09-24 01:48:11
【问题描述】:
TLDR:一种凭证有效,而另一种无效?
我有 2 个用于 Cloud Firestore 的 Google Cloud 项目。一种用于生产,一种用于开发。
注意:我不使用 firebase,只使用 firestore。
项目 1(产品):我部署到 GAE(Google App Engine)的代码能够使用生产凭据正常访问 Firestore。 GAE 和 Firestore 共享同一个项目。
项目 2(开发):我的本地代码能够使用开发凭据访问 Firestore(我指定为我的开发沙箱的项目)
问题来了:
错误:7 PERMISSION_DENIED:权限缺失或不足。
这是我在运行以下代码时遇到的错误。
// script.js
//
// In my local environment (my laptop), I want to run a script that queries my
// "Production Firestore" and do some analysis.
const Firestore = require('@google-cloud/firestore');
const prodProjectKey = require('./keys/prod.json')
const db = new Firestore({
credentials: {
client_email: prodProjectKey.client_email,
private_key: prodProjectKey.private_key,
},
})
;(async () => {
const doc = await db.collection('users').doc('123').get()
})()
现在,我毫不奇怪,如果我将凭据更改为使用我的开发凭据,一切正常。
// To be super clear, the following works
// (the only difference is using dev.json instead of prod.json)
const devProjectKey = require('./keys/dev.json')
const db = new Firestore({
credentials: {
client_email: devProjectKey.client_email,
private_key: devProjectKey.private_key,
},
})
;(async () => {
const doc = await db.collection('users').doc('123').get()
})()
据我所知,这些键之间的唯一区别是项目 ID。我按照相同的步骤创建它们: Google Cloud Console -> 服务帐户 -> 创建服务帐户 -> 分配项目所有者角色 -> 创建密钥 -> 下载密钥
我已经看到其他关于 SO 的问题指向“数据库规则”,但是
- 这些答案似乎只适用于 Firebase 用户(我只使用 Firestore)
- 似乎无法解释为什么我的 prod 和 dev 项目表现不同
【问题讨论】:
标签: node.js google-cloud-firestore