Android Studio - 从GetIdToken获取Firebase令牌

rea*_*dev 6 java token firebase firebase-authentication

我在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
}
Run Code Online (Sandbox Code Playgroud)

我现在正在尝试为Android做相同的操作.在火力文档触及的话题,但并不能说明获得令牌广泛.我尝试过以下方法:

Log.d(TAG, user.getIdToken(true));
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试在我的后端服务器上单独验证时,这会给我以下错误:

错误:解码Firebase ID令牌失败.确保传递了代表ID令牌的整个字符串JWT.有关如何检索ID令牌的详细信息,请参阅 https://firebase.google.com/docs/auth/admin/verify-id-tokens.在新的FirebaseAuthError(/ user_code/node_modules/firebase-admin /)中的FirebaseAuthError.FirebaseError [作为构造函数](/user_code/node_modules/firebase-admin/lib/utils/error.js:25:28)的FirebaseAuthError.Error(native)中lib/utils/error.js:90:23)在Auth.verifyIdToken的FirebaseTokenGenerator.verifyIdToken(/user_code/node_modules/firebase-admin/lib/auth/token-generator.js:155:35)(/ user_code/node_modules/firebase-admin/lib/auth/auth.js:104:37)at admin.database.ref.child.child.child.child.child.child.orderByChild.once.then.snapshot(/user_code/index.js: 1430:22)at process._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);
  }
});
Run Code Online (Sandbox Code Playgroud)

Rba*_*bar 11

您的第二种方法很接近,您只需使用<GetTokenResult>而不是<UploadTask.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);
  }
});
Run Code Online (Sandbox Code Playgroud)