2017-03-31 2 views
1

Je suis en train de mettre en œuvre la vérification de l'identité symbolique d'un côté serveur à l'aide Firebase Administrateur SDK (Java), mais je reçois l'erreur:Firebase: Raté pour analyser compte de service: « project_id » doit être

Impossible d'analyser le service compte: « project_id » doit être réglé

Je généré mes lettres de créance dans le chemin de firebase suivant:

projet settings-> Comptes de service et générer une nouvelle clé privée et j'ai ceci:

{ 
     "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...." 
} 

également la façon dont je charge le fichier JSON s `la même que la page Web firebase:

pour maven:

enter image description here

pour charger mon fichier JSON en utilisant java:

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

et la dernière partie quand je suis en train de vérifier l'ID de jeton:

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

      } 
     }); 

Je pense que je l'ai fait la même que la page Web firebase mentionne mais je reçois l'erreur ci-dessus

quelqu'un peut me aider?

J'apprécierais votre aide.

+0

Quelle version d'Admin Java SDK utilisez-vous? Pouvez-vous le reprocher sur la dernière version 4.1.5? – jwngr

+0

Etes-vous sûr que le chemin '" path/to/serviceAccountKey.json "' est en fait le bon chemin vers votre fichier JSON? Il est possible que vous référeniez un fichier qui n'existe pas. – jwngr

+0

Bonjour, oui je suis en utilisant la dernière version de firebase admin 4.1.5 et oui Le chemin de mon fichier correspond à mon chemin de java, donc je ne spécifie que le nom de mon fichier, En fait, après le chargement du fichier, j'imprime dans la console et c'est comme le fichier json. –

Répondre

0

J'ai trouvé le problème. Le problème était quand j'ai essayé de revalider l'objet JSON, en imprimant l'objet JSON dans la console, je ne fais aucun processus avec le Stream (ne peut pas utiliser BufferedReader aussi) avant de définir les options firebase, je veux dire, la course n `t de code suivant, nous montrant l'erreur:

Firebase: Raté pour analyser compte de service: « project_id » doit être

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

mais si je charge le fichier directement comme suit sans tout code de bloc avant (pas bufferedReader ou jsonData = streamToSt ring (serviceAccount); ....):

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

Je ne sais pas pourquoi ce comportement fonctionne maintenant.

je vous remercie pour votre soutien!