我正在尝试使用Firebase进行身份验证,但是我目前面临一些奇怪的问题。
在我的后端,我正在使用它来验证令牌:
async getUser(token: string) {
const ticket = await client.verifyIdToken({
idToken: token,
audience: CLIENT_ID
});
const payload = ticket.getPayload();
const userid = payload.sub;
...
}
当我从IdpResponse.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(token: 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”}
在使用时:从idpResponse检索的https://oauth2.googleapis.com/tokeninfo?id_token=XYZ123
令牌可以正常工作,但从currentUser检索的其他令牌则不能,返回:
{ “错误”:“ invalid_token”, “ error_description”:“无效值”}
如何从currentUser获取idpToken?为什么idToken不起作用?
答案 0 :(得分:0)
您可能需要查看Firebase文档:
https://firebase.google.com/docs/auth/admin/verify-id-tokens
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();
}
}
});