Firebase自定义令牌认证失败:抛出FirebaseException内部空错误求助
遇到这种模糊的内部错误确实挺头疼的,我结合Firebase自定义令牌的常见踩坑点,给你几个具体的排查方向:
先检查UID的合法性
Firebase对自定义令牌的UID有严格规则:必须是1-128字符的字符串,绝对不能包含冒号:。你可以先把uid2的值打印出来确认,如果UID不符合这个要求,生成的令牌在验证时就会返回这种无厘头的null错误。排查额外声明(additionalClaims)的问题
确保你传入的additionalClaims没有包含Firebase的保留字段,比如sub、iss、aud、exp、iat这些——这些字段是Firebase自动生成的,手动添加会直接破坏令牌的合法性。你可以先尝试不传additionalClaims,只传UID生成令牌,看看能不能正常验证,以此排除声明字段的问题。确认Firebase实例初始化正确
你代码里用了FirebaseAuth.getInstance(instancePatient),要仔细检查instancePatient这个FirebaseApp实例是不是用正确的服务账号密钥初始化的。如果实例配置出错,生成的令牌签名会无效,自然过不了验证。可以先换成默认实例FirebaseAuth.getInstance()测试下,看看是否能正常工作。应用端要打印完整的异常信息
虽然你没贴客户端代码,但建议在验证失败时不要只拿异常的getMessage(),要打印完整的异常栈:FirebaseAuth.getInstance().signInWithCustomToken(customToken) .addOnCompleteListener(task -> { if (!task.isSuccessful()) { Log.e("FirebaseAuth", "验证失败", task.getException()); } });栈信息里通常会藏着真正的错误原因,比如令牌无效、签名错误之类的关键细节。
检查服务账号权限与令牌完整性
生成令牌的服务账号需要有Firebase Auth Admin权限,你可以去Firebase控制台的「项目设置 > 服务账号」里确认权限是否正确。另外,还要确保生成的令牌完整发送到了客户端,没有在传输过程中被截断或修改——如果令牌少了字符,验证时也会出现这种模糊错误。
内容的提问来源于stack exchange,提问作者Williandy Black

