Google Firebase服务器持久连接invalid_token

时间:2016-05-25 03:08:38

标签: java firebase firebase-realtime-database firebase-security

我正在尝试使用Firebase服务器SDK来监控特定路径的值。我跟着documentation但经过一段时间后,我开始看到日志错误,如:

[WARN] PersistentConnection: pc_0 - Authentication failed: invalid_token (Access denied.)

我正在使用最新版本:

 com.google.firebase:firebase-server-sdk:3.0.0

我遵循了Installation & Setup for Servers的Java指南,但是在一段时间后仍然会发生此错误,并且它不会调用我可以挂钩尝试重新进行身份验证的任何代码。有没有人有类似的问题,知道解决方案?

更新2016-05-31:

我启用了调试,我发现持久连接线程在这些警告之后确实刷新了它的身份验证。

我还可以根据这些信息和进一步测试来缩小这个问题的范围:

在令牌刷新停止在初始令牌过期后接收数据之前,任何长时间运行ValueEventListener连接到DatabaseReference。例如,应用程序启动后立即附加一个侦听器。

将新侦听器附加到数据库引用,然后在获得结果后处理侦听器工作正常。

但是,这种行为会破坏Firebase的“实时数据”方面。你不能指望 - 无论如何3.0.0 - 一个监听器来接收应用程序生命周期的数据。好像Firebase中存在一个主要错误。

2 个答案:

答案 0 :(得分:1)

更新:我们已经发布了应该解决此问题的3.0.1 SDK。

我们在3.0.0 Firebase Java Server SDK中发现了一个错误,它无法重新验证Firebase数据库后端。如果您的流程运行时间超过一小时并且您没有任何活动的侦听器(特别是在一小时标记处),则会发生这种情况。您将在控制台日志中看到[WARN] PersistentConnection: pc_0 - Authentication failed: invalid_token (Access denied.)错误重复出现。

我们将很快发布一个新版本(firebase-server-sdk 3.0.1)。在此之前,您可以通过保持活动侦听器(例如,虚拟位置上的addValueEventListener())来解决此问题。

很抱歉给您带来不便!我们会尽快解决问题。

答案 1 :(得分:0)

我已经能够重现该问题按照Installation & Setup for Server中的步骤进行操作。在我的情况下,这会在使用新创建的服务帐户时发生。但是,如果您使用现有服务帐户(例如Compute Engine默认服务帐户),则不会显示日志消息。

我新创建的服务帐户与现有服务帐户之间的唯一区别是新帐户不是IAM页面中的编辑成员。 尝试在IAM页面中将新帐户添加为编辑器会导致错误。