Android Studio - 从GetIdToken获取Firebase令牌

时间:2017-08-01 01:48:44

标签: 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 = " + 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令牌失败。确保你通过了   整个字符串JWT代表一个ID令牌。看到   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)       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);
  }
});

2 个答案:

答案 0 :(得分: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);
  }
});

答案 1 :(得分:1)

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

<!-- Start Banner -->
<div class="ulockd-home-slider">
    <div class="container-fluid">
        <div class="row">
            <div class="pogoSlider" id="js-main-slider">
                <div class="pogoSlider-slide" style="background-image:url(images/sladd_ur.jpg);">
                    <div class="container">
                        <div class="row">
                            <div class="col-md-12">
                                <div class="slide_text white_fonts">
                                    <h3>Progress & Success<br><strong>Currency</strong></h3>
                                    <br>
                                    <a class="start_exchange_bt" href="exchange.html">Start Exchange ></a>
                                </div>
                            </div>
                        </div>
                    </div>
                </div>
                <div class="pogoSlider-slide" style="background-image:url(images/sladd_i.jpg);">
                    <div class="container">
                        <div class="row">
                            <div class="col-md-12">
                                <div class="slide_text white_fonts">
                                    <h3>Progress & Success<br><strong>Currency</strong></h3>
                                    <br>
                                    <a class="start_exchange_bt" href="exchange.html">Start Exchange ></a>
                                </div>
                            </div>
                        </div>
                    </div>
                </div>
            </div>
            <!-- .pogoSlider -->
        </div>
    </div>
</div>
<!-- End Banner -->