Java Android Studio-从GetIdToken获取Firebase令牌
我已在Swift中完成以下工作:Java Android Studio-从GetIdToken获取Firebase令牌,java,firebase,firebase-authentication,token,Java,Firebase,Firebase Authentication,Token,我已在Swift中完成以下工作: let currentUser = Auth.auth().currentUser currentUser?.getTokenForcingRefresh(true) {idToken, error in if let error = error { // Handle error print("error (below)") print(error) return; } print("idToken =
let currentUser = Auth.auth().currentUser
currentUser?.getTokenForcingRefresh(true) {idToken, error in
if let error = error {
// Handle error
print("error (below)")
print(error)
return;
}
print("idToken = " + idToken!) // token looks like this: kpJhbGRiOiJSUzI1NiIsIntpZCI9Ijg0MjIuYzc3NTWkOWZmTjI3OBQxZTkyNTpkNWZjZjUwNzg2YTFmNGIifQ.eyJpc3MiOiJodHRwczovL3NlY3Vy... (it's really long)
//..do stuff with token
}
我现在正试图为Android做同样的事情。文章涉及到了这个话题,但没有详细解释如何获得代币。我尝试了以下方法:
Log.d(TAG, user.getIdToken(true));
但是,当我尝试在后端服务器上单独对此进行身份验证时,会出现以下错误:
错误:解码Firebase ID令牌失败。确保你通过了考试
表示ID标记的整个字符串JWT。看见
对于
有关如何检索ID令牌的详细信息。
在FirebaseAuthError.Error处(本机)
在FirebaseAuthError.FirebaseError[作为构造函数](/user\u code/node\u modules/firebase admin/lib/utils/error.js:25:28)
在新的FirebaseAuthError(/user\u code/node\u modules/firebase admin/lib/utils/error.js:90:23)
在firebaseTokenerator.verifyIdToken(/user\u code/node\u modules/firebase admin/lib/auth/token generator.js:155:35)
在Auth.verifyIdToken(/user\u code/node\u modules/firebase admin/lib/Auth/Auth.js:104:37)
位于admin.database.ref.child.child.child.child.orderByChild.one.then.snapshot
(/user_code/index.js:1430:22)
在进程中。_tickDomainCallback(internal/process/next_tick.js:135:7)
我相信这是因为需要一个onSuccessListener,但我不确定,也没有成功地实现它,如下所示:
user.getIdToken(true).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
@Override
public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
Log.d(TAG, "onSuccess: taskSnapshot = " + taskSnapshot);
}
});
user.getIdToken(true).addOnSuccessListener(新的OnSuccessListener(){
@凌驾
成功时公共无效(UploadTask.TaskSnapshot TaskSnapshot){
Log.d(标记“onSuccess:taskSnapshot=“+taskSnapshot”);
}
});
您的第二种方法很接近,您只需要使用
而不是
,因为这是使用Firebase存储上传图像的方法
试试这个:
user.getIdToken(true).addOnSuccessListener(new OnSuccessListener<GetTokenResult>() {
@Override
public void onSuccess(GetTokenResult result) {
String idToken = result.getToken();
//Do whatever
Log.d(TAG, "GetTokenResult result = " + idToken);
}
});
user.getIdToken(true).addOnSuccessListener(新的OnSuccessListener(){
@凌驾
成功时公共无效(GetTokenResult结果){
字符串idToken=result.getToken();
//做任何事
Log.d(标记“GetTokenResult结果=“+idToken”);
}
});
您可以获得如下代码所示的用户令牌
FirebaseAuth mAuth = FirebaseAuth.getInstance();
mAuth.signInWithCredential(credential)
.addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
if (task.isSuccessful()) {
information
FirebaseUser user = Objects.requireNonNull(task.getResult()).getUser();
assert user != null;
user.getIdToken(true).addOnSuccessListener(result -> {
String idToken = result.getToken();
//Do whatever
Log.d(TAG, "GetTokenResult result = " + idToken);
});
} else {
if (task.getException() instanceof FirebaseAuthInvalidCredentialsException) {
Toast.makeText(getApplicationContext(), "Your code is not correct!", Toast.LENGTH_SHORT).show();
code.");
}
}
}
});
}
FirebaseAuth-mAuth=FirebaseAuth.getInstance();
mAuth.SIGNWITH凭证(凭证)
.addOnCompleteListener(这是新的OnCompleteListener(){
@凌驾
未完成的公共void(@NonNull任务){
if(task.issusccessful()){
信息
FirebaseUser=Objects.requireNonNull(task.getResult()).getUser();
断言用户!=null;
user.getIdToken(true).addOnSuccessListener(结果->{
字符串idToken=result.getToken();
//做任何事
Log.d(标记“GetTokenResult结果=“+idToken”);
});
}否则{
if(FirebaseAuthInvalidCredentialsException的task.getException()实例){
Toast.makeText(getApplicationContext(),“您的代码不正确!”,Toast.LENGTH\u SHORT.show();
代码。”);
}
}
}
});
}
请花时间正确格式化和缩进您的代码。如果您从其他人那里复制了代码,请注明您的源代码。