2017-08-01 103 views
3

我已經做了獲取火力地堡令牌斯威夫特以下幾點:Android的工作室 - 從GetIdToken

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)); 

然而,這給了我下面的錯誤,當我嘗試驗證這本身我的後端服務器上:

Error: Decoding Firebase ID token failed. Make sure you passed the entire string JWT which represents an ID token. See https://firebase.google.com/docs/auth/admin/verify-id-tokens for details on how to retrieve an ID token. at FirebaseAuthError.Error (native) at FirebaseAuthError.FirebaseError [as constructor] (/user_code/node_modules/firebase-admin/lib/utils/error.js:25:28) at new FirebaseAuthError (/user_code/node_modules/firebase-admin/lib/utils/error.js:90:23) at FirebaseTokenGenerator.verifyIdToken (/user_code/node_modules/firebase-admin/lib/auth/token-generator.js:155:35) at 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); 
    } 
}); 

回答

4

你的第二個方法是關閉,你只需要使用<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); 
    } 
});