Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android Studio-从GetIdToken获取Firebase令牌_Java_Firebase_Firebase Authentication_Token - Fatal编程技术网

Java Android Studio-从GetIdToken获取Firebase令牌

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 =

我已在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 = " + 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();
代码。”);
}
}
}
});
}

请花时间正确格式化和缩进您的代码。如果您从其他人那里复制了代码,请注明您的源代码。