【发布时间】:2018-10-22 10:39:26
【问题描述】:
我关注了这些Firebase directions,在过去的几周里,我一直在使用databaseAuthVariableOverride 让用户使用 Algolia 在我的应用程序中运行搜索结果并访问数据库。我今天早些时候更改了我的 Firebase 服务帐户 API 密钥,现在 databaseAuthVariableOverride 不再有效,我无法访问数据库。
在我更改 Api Key 之前,当我将规则和 app.js 文件设置为:
Firebase 规则:
{
"rules": {
".read": "auth.uid === 'my-service-worker'", // matches the databaseAuthVariableOverride
".write": "auth.uid != null"
}
}
和我的 App.js 文件到:
var admin = require("firebase-admin");
admin.initializeApp({
credential: admin.credential.cert({
projectId: .....,
privateKey: "-----BEGIN PRIVATE KEY-----oldPrivateKey----END PRIVATE KEY-----\n",
clientEmail: .....
}),
databaseURL: .....,
databaseAuthVariableOverride: {
uid: "my-service-worker" // matches the rules
}
});
当我更改我的服务帐户时,我去了 ProjectOverview > ProjectSettings > ServiceAccounts > 生成新的私钥。按下 Generate New Private Key 后,一个新的密钥被下载到我的 cpu 中。
我检查了IAM 内部的权限,并且服务帐户客户电子邮件设置为Editor。
然后,我将生成的新私钥(类似于 -----BEGIN PRIVATE KEY-----newPrivateKey----END PRIVATE KEY-----\n)复制并粘贴到我的 app.js 文件中,其中设置了我的旧私钥:
admin.initializeApp({
credential: admin.credential.cert({
// my new private key
privateKey: "-----BEGIN PRIVATE KEY-----newPrivateKey----END PRIVATE KEY-----\n"
现在唯一可行的方法是,如果我将 Firebase 规则设置为:
{
"rules": {
".read": true,
".write": "auth.uid != null"
}
}
API 密钥必须正常工作,否则我将无法在规则设置为 true 的情况下读取任何内容
当我尝试按照设置规则以匹配 my-service-worker 时的原始方式执行操作时,app.js 文件不再被授予对数据库的访问权限。
在 cmets @Doug Stevenson 建议我更改新服务帐户附带的所有字段,但问题是我只使用了旧服务帐户中的 3 个字段,其中 3 个唯一更改的是私有钥匙。其他 2 个字段具有相同的值。 还有几个我从来没有开始使用过的:
这些是app.js 文件中使用的值:
可能是什么问题?
更新 @Doug Stevenson 说每次生成一个新的服务帐户时,也应该生成一个新的客户电子邮件。我生成了 5 个服务帐户,前 4 个保留了相同的客户电子邮件。我不确定为什么会发生这种情况,但我去了 Google Cloud Console,生成了我自己的,删除了旧的,但没有任何效果。然后我用蓝色按钮回到 Firebase 控制台,按下它,然后我收到一封新的客户电子邮件。我花了 5 次服务帐户下载来更改它???无论如何,我用新的客户电子邮件更新了这些值,它与私钥相关联,我的问题仍然存在。我还检查了权限,它设置为编辑器。
我通过电子邮件向 Firebase 寻求帮助,我正在等待回复。
【问题讨论】:
-
您能否编辑您的问题以准确解释您在“更改我的 Firebase 服务帐户 API 密钥”时做了什么?
-
@Doug Stevenson 我更新了它
标签: node.js firebase firebase-realtime-database firebase-authentication firebase-admin