2017-03-31 13 views
1

を設定する必要があります私はFirebase管理SDK(Javaの)を使用して、サーバー側から検証トークンIDを実装しようとしていますが、私はエラーを取得しています:Firebase:サービスアカウントの解析に失敗しました:「PROJECT_ID」は

サービスアカウントの解析に失敗しました:「PROJECT_ID」は

を設定する必要があります私はfirebaseから次のパスに私の資格情報を生成:

プロジェクト設定 - >サービスアカウントと新しい秘密鍵を生成し、私はこれを持っています:

Mavenのための

enter image description here

は、Javaを使用して、私のJSONファイルをロードする

{ 
     "type": "service_account", 
     "project_id": "apilogintest-9c5f5", 
     "private_key_id": "<privateKeyId...>", 
     "private_key": "-----BEGIN PRIVATE KEY-----\n<a really big private Key>\n-----END PRIVATE KEY-----\n", 
     "client_email": "<clientEmail>", 
     "client_id": "<clientId>", 
     "auth_uri": "https://accounts.google.com/o/oauth2/auth", 
     "token_uri": "https://accounts.google.com/o/oauth2/token", 
     "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs", 
     "client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/firebase-adminsdk-hhay...." 
} 

はまた、私はJSONファイルをロードする方法はfirebaseウェブページと同じそれは `s:

FileInputStream serviceAccount = new FileInputStream("path/to/serviceAccountKey.json"); 
    FirebaseOptions options = new FirebaseOptions.Builder() 
     .setCredential(FirebaseCredentials.fromCertificate(serviceAccount)) 
     .setDatabaseUrl("https://apilogintest-9c5f5.firebaseio.com/") 
     .build(); 
    FirebaseApp initializeApp = FirebaseApp.initializeApp(options); 

トークンを確認しようとしている最後の部分ID:

FirebaseAuth.getInstance(initializeApp).verifyIdToken(token) 
     .addOnSuccessListener(new OnSuccessListener<FirebaseToken>() { 
      @Override 
      public void onSuccess(FirebaseToken decodedToken) { 
       String uid = decodedToken.getUid(); 
      } 
     }).addOnFailureListener(new OnFailureListener() { 
      @Override 
      public void onFailure(@NonNull Exception e) { 
       e.printStackTrace(); 

      } 
     }); 

私は私がfirebase Webページが言及していることと同じをしたと思いますが、誰かが私を助けることができる私は、上記のエラーに

を取得していますか?

私はあなたの助けに感謝します。

+0

使用しているAdmin Java SDKのバージョンは何ですか?あなたは最新の4.1.5バージョンでこれを再現できますか? – jwngr

+0

また、 '' path/to/serviceAccountKey.json ""パスが実際にJSONファイルの正しいパスになっていますか?存在しないファイルを参照している可能性があります。 – jwngr

+0

こんにちは、firebase admin 4.1.5の最新バージョンを使用しています。はい、はい私のファイルのパスはjavaのパスに対応していますので、ファイルの名前のみを指定しています。それはコンソールで、それはjsonファイルのようです。 –

答えて

0

私は問題を把握しました。

問題は、コンソールでJSONオブジェクトを印刷したときにJSONオブジェクトを再検証しようとしたときでした。Firebaseオプションを設定する前にストリームでProccessを実行していない(BufferedReaderも使用できません)

Firebaseは:サービスアカウントの解析に失敗しました:「PROJECT_ID」を

try { 
     String jsonData = streamToString(serviceAccount); 
     JSONObject jsonObject = new JSONObject(jsonData); 
     String projectId = jsonObject.getString("project_id"); 
     System.out.println(projectId); 
    } catch (JSONException e) { 
     throw new RuntimeException(e); 
    } 

FirebaseOptions options = new FirebaseOptions.Builder() 
      .setCredential(FirebaseCredentials.fromCertificate(serviceAccount)) 
      .setDatabaseUrl("https://apilogintest-9c5f5.firebaseio.com").build(); 
    initializeApp = FirebaseApp.initializeApp(options); 

を設定する必要がありますが、私は直接ファイルをロードする場合せずに次のように私たちにエラーを示す次のコードはdoesnの `tの実行、前のブロックコード(バッファリングされていないReaderまたはjsonData = streamToSt ring(serviceAccount); ....):

FirebaseOptions options = new FirebaseOptions.Builder() 
       .setCredential(FirebaseCredentials.fromCertificate(fl)) 
       .setDatabaseUrl("https://apilogintest-9c5f5.firebaseio.com").build(); 
     initializeApp = FirebaseApp.initializeApp(options); 

この動作が現在動作している理由はわかりません。

ご協力いただきありがとうございます。

関連する問題