【问题标题】:No longer captures the event from firebase by Admin SDK不再通过 Admin SDK 从 firebase 捕获事件
【发布时间】:2016-12-11 07:49:05
【问题描述】:

我已经在我的节点服务器上安装并运行了 firebase admin,它一直运行良好,直到今天,没有给出错误说明发生了什么,它只是停止工作。

var admin = require("firebase-admin");

            var serviceAccount = require("mycom-firebase-adminsdk-d1ebt123456.json");

            var app = FireBaseAdapter.admin.initializeApp({
                credential: FireBaseAdapter.admin.credential.cert(serviceAccount),
                databaseURL: "https://xxxx.firebaseio.com"
            });

var db = app.database();
var ref = db.ref("messages"); // this node actually exists in my db.


ref.on("value", function(snapshot) {
// this will never be called - which has been working before.

  console.log(snapshot.val());
}, function (errorObject) {
  console.log("The read failed: " + errorObject.code);
});

我什至将它包装在 try catch 中以打印出错误,但没有任何错误。我可以在帐户中登录 firebase 控制台并查看我的数据库没有任何变化(小型数据库)(尽管它似乎比正常速度慢)。 firebase Admin SDK 有问题吗?任何帮助表示赞赏。

【问题讨论】:

  • 我刚刚快速检查了一下,仍然可以使用管理员凭据从我的一个数据库中读取数据,类似于您的代码的操作方式。我尝试了 4.0.0 和 4.0.4 版本。所以我不认为在任何地方都存在一般故障,并且管理 SDK 中存在立即明显的错误。
  • 它突然停止工作,它仍然以某种方式连接到数据库,但“on value”事件不再触发。不过没有错误需要解决。

标签: node.js firebase firebase-realtime-database firebase-admin


【解决方案1】:

花了好几个小时找出原因后,我找到了问题所在。 由于我找不到任何方法来启用 firebase-admin 的日志,所以在一切静默运行的情况下解决问题是死路一条,所以我改用 firebase 包进行日志记录

var firebase = require("firebase");
firebase.initializeApp({
    databaseURL: "https://xxxxx.firebaseio.com",
    serviceAccount: '....'
});

firebase.database.enableLogging(true); // <=== important

我的问题和this question很相似

然后我可以看到实际的错误:

p:0:获取令牌失败:错误:刷新访问令牌时出错: invalid_grant(无效的 JWT:令牌必须是短期令牌,并且在 合理的时间范围)

this anwser 解释了此问题的解决方案。此问题是由于执行代码的计算机时钟同步不佳造成的,延迟了 5 分钟(由于内部时钟的电池故障)。 当我手动将计算机的内部时间更改为正确的时间(或完全重置计算机的日期时间)时,它又开始工作了。

在我的情况下,重置日期时间和时区后,firebase 会自动再次工作,我不需要重新生成另一个服务帐户。

【讨论】:

  • 好抓住特尔文!
猜你喜欢
  • 2021-12-21
  • 1970-01-01
  • 2021-11-03
  • 1970-01-01
  • 2018-03-20
  • 2013-04-27
  • 2018-06-24
  • 2020-06-28
  • 1970-01-01
相关资源
最近更新 更多