6

我正在使用Firebase UI Auth来处理我的应用中的电子邮件签名,并启用了磁盘持久性,以便可以离线访问数据。但在应用程序中登录一小时后,我在logcat中收到了此警告。1小时后身份验证令牌无效 - Firebase中的磁盘持久性

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. 

当我收到这条消息,应用程序不能做任何火力保存/恢复新的未缓存的数据操作,除非我退出/清除数据,然后重新登录。然后,在登录后大约一个小时后,问题再次出现。我按照此token refresh troubleshooting guide(将我的调试和生产密钥SHA1添加到Firebase和Google API控制台),但没有解决此问题。我在我的项目中使用了Firebase Console中最新的google-services.json

我也已经在使用最新的火力地堡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); 
    } 
} 

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

+0

这是一个远射,但你可以检查设备上的日期/时间,以确保它的设置正确吗?如果您的设备设置为不正确的时间,偶尔会出现令牌相关问题。 –

+0

它设置为“自动”,所以它应该是正确的(基于互联网时间)。我不知道这是否与firebase-ui库有关。感谢您的评论,我可以尝试的其他解决方案? :) – Wilik

+0

用户登录后,您是否可以通过调用FirebaseUser.GetToken(true)来获取最新的Firebase身份验证令牌,并在令牌头中打印出“孩子”? Firebase身份验证令牌是Json Web令牌(JWT),您可以使用https://jwt.io/查看JWT中的字段。 –

回答

1

Firebase服务器无法识别小孩22fb7e6f95c657f4407e04e97c984bb6dbbcfeb3。如果帐户邮件不同,getToken()应该返回不同的标记。请向Firebase提交一张票据,其中包括来自两个应用的整个令牌载荷。

+0

确定,如果问题仍然存在,我会再进行一次测试,然后提交Firebase支持凭单。谢谢! – Wilik

1

在Firebase 3中,智威汤逊的最大生存期60分钟。所以1小时后,您将不得不重新生成访问令牌。至于无效索赔“kid”,您无需将任何孩子有效负载传递给您的JWT。

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

+0

嗨,感谢您的回复:)我没有对JWT做任何事情,因为我使用Firebase SDK和库(Firebase-UI)来处理认证部分。只有当我将两个应用程序都安装到设备并在两个应用程序中登录后,问题才出现。现在问题不再存在,可能是因为我更新了SDK到9.4.0。 – Wilik