【问题标题】:Android Studio - Get Firebase token from GetIdTokenAndroid Studio - 从 GetIdToken 获取 Firebase 令牌
【发布时间】:2018-01-07 17:24:16
【问题描述】:

我在 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 做同样的事情。 firebase documentation 涉及该主题,但没有广泛解释获取令牌。我尝试了以下方法:

Log.d(TAG, user.getIdToken(true));

但是,当我尝试在后端服务器上单独进行身份验证时,这给了我以下错误:

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

【问题讨论】:

    标签: java firebase firebase-authentication token


    【解决方案1】:

    您可以像下面的代码一样获取用户令牌

            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.");
                                    }
                                }
                            }
                        });
            }
    

    【讨论】:

    • 请花时间正确格式化和缩进您的代码。以防万一您从其他人那里复制代码,请注明您的来源。
    【解决方案2】:

    您的第二种方法很接近,您只需要使用&lt;GetTokenResult&gt; 而不是&lt;UploadTask.TaskSnapshot&gt;,因为这是使用 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);
      }
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-07
      • 2015-09-07
      • 2022-01-01
      • 1970-01-01
      • 2016-09-24
      • 1970-01-01
      相关资源
      最近更新 更多