1小时后无效的身份验证令牌 - Firebase中的磁盘持久性

时间:2016-07-23 17:55:42

标签: android firebase firebase-realtime-database firebase-authentication firebaseui

我使用Firebase UI Auth处理我的应用中的电子邮件登录,并启用了磁盘持久性,以便可以脱机访问数据。但是在应用程序中登录了一个小时之后,我在logcat中收到了这个警告。

W/PersistentConnection: pc_0 - Auth token revoked: expired_token (Auth token is expired.)
W/PersistentConnection: pc_0 - Authentication failed: invalid_token (Invalid claim 'kid' in auth header.)
W/PersistentConnection: pc_0 - Authentication failed: invalid_token (Invalid claim 'kid' in auth header.)
... repeatedly
... and sometimes
W/DynamiteModule: Local module descriptor class for com.google.firebase.auth not found.

当我收到此消息时,应用程序无法执行任何firebase保存/检索新的未缓存数据操作,除非我注销/清除数据然后再次登录。然后问题在登录后大约一个小时后再次发生。我已按照此token refresh troubleshooting guide(将我的调试和生产密钥SHA1添加到Firebase和Google API控制台)并且它无法解决此问题。我在项目中使用了Firebase控制台中的最新google-services.json

我还在使用最新的Firebase SDK和Play服务库

compile 'com.google.android.gms:play-services-auth:9.2.1'
compile 'com.google.firebase:firebase-core:9.2.1'
compile 'com.google.firebase:firebase-database:9.2.1'
compile 'com.google.firebase:firebase-auth:9.2.1'
compile 'com.firebaseui:firebase-ui-auth:0.4.3'

我在Application类中启用了持久性。

public class Application extends android.app.Application {
    @Override
    public void onCreate() {
        super.onCreate();
        FirebaseDatabase.getInstance().setPersistenceEnabled(true);
    }
}

有什么想法吗?如果您需要更多说明或我没有提供足够的信息,请随时发表评论。 谢谢

2 个答案:

答案 0 :(得分:1)

Firebase服务器无法识别孩子22fb7e6f95c657f4407e04e97c984bb6dbbcfeb3。如果帐户电子邮件不同,getToken()肯定会返回不同的令牌。请向Firebase提交一张票,包括您的两个应用中的整个令牌有效负载。

答案 1 :(得分:1)

在Firebase 3中,JWT的最长生命周期 60分钟。因此,1小时后,您将不得不重新生成访问令牌。对于无效声明“kid”,您无需将任何 kid 有效负载传递给JWT。

注意:您遇到的问题是由于最近对JWT结构和工作流程所做的更改。我遇到了同样的问题 - 我根据新的JWT规范修改了我的代码,事情开始起作用了。