Android Firebase登录无效的idToken

Android Firebase登录无效的idToken,android,firebase,kotlin,Android,Firebase,Kotlin,我正试图用Firebase实现身份验证,但我目前面临一些奇怪的问题 在我的后端中,我使用此验证令牌: 异步getUser(令牌:字符串){ const ticket=wait client.verifyIdToken({ idToken:token, 观众:客户ID }); const payload=ticket.getPayload(); const userid=payload.sub; ... } 当我从idpreponse.fromResultIntent(data)发送此令牌时,一

我正试图用Firebase实现身份验证,但我目前面临一些奇怪的问题

在我的后端中,我使用此验证令牌:

异步getUser(令牌:字符串){ const ticket=wait client.verifyIdToken({ idToken:token, 观众:客户ID }); const payload=ticket.getPayload(); const userid=payload.sub; ... } 当我从
idpreponse.fromResultIntent(data)
发送此令牌时,一切正常

override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
    super.onActivityResult(requestCode, resultCode, data)

    if (requestCode == RC_SIGN_IN) {
        val response = IdpResponse.fromResultIntent(data)

        if (resultCode == Activity.RESULT_OK) {
            response?.idpToken?.let {
                val loginRepo = LoginRepository(this)
                loginRepo.login(Login(it), {}, {})
            }
        } else {
            ...
        }
    }
}
但是当我从
currentUser
发送令牌时,
async getUser(令牌:string)
总是抛出异常

val user = FirebaseAuth.getInstance().currentUser
if (user != null) {
    user.getIdToken(false).addOnCompleteListener {
        if (it.isSuccessful) {
            val token = it.result?.token
            val loginRepo = LoginRepository(this)
            token?.let { loginRepo.login(Login(it), {
                ...
            }, {
                ...
            }) }
        }
    }
} 
引发异常:

错误:未找到信封的pem: {“alg”:“RS256”,“kid”:“…”,“typ”:“JWT”}

使用时:
https://oauth2.googleapis.com/tokeninfo?id_token=XYZ123
从IDPSresponse检索的令牌工作正常,但从currentUser检索的另一个令牌不工作,返回:

{ “错误”:“无效的\u令牌”, “错误描述”:“无效值”}


如何从currentUser获取de idpToken?为什么idToken不起作用?

您可能需要查看firebase文档:

FirebaseUser mUser=FirebaseAuth.getInstance().getCurrentUser();
mUser.getIdToken(真)
.addOnCompleteListener(新的OnCompleteListener(){
未完成的公共void(@NonNull任务){
if(task.issusccessful()){
字符串idToken=task.getResult().getToken();
//通过HTTPS将令牌发送到后端
// ...
}否则{
//Handle error->task.getException();
}
}
});

我已经这么做了,我的代码与你的代码相同,但使用的是Kotlin。
FirebaseUser mUser = FirebaseAuth.getInstance().getCurrentUser();
mUser.getIdToken(true)
    .addOnCompleteListener(new OnCompleteListener<GetTokenResult>() {
        public void onComplete(@NonNull Task<GetTokenResult> task) {
            if (task.isSuccessful()) {
                String idToken = task.getResult().getToken();
                // Send token to your backend via HTTPS
                // ...
            } else {
                // Handle error -> task.getException();
            }
        }
    });