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