2017-02-02 1 views
0

Ich verwende Firebase, um die Authentifizierung in einer Java-Webanwendung mit Spring Boot und Thymeleaf zu verarbeiten. Ich habe Google nur angemeldet.Firebase lädt Anmeldeinformationen nicht in Java

Am Front-End habe ich es geschafft, dass Firebase korrekt funktioniert und den Benutzer authentifiziert. Also ist das Front-End in Ordnung.

Wenn es um die Validierung des Tokens im Back-End geht, versuche ich Firebase Admin SDK zu verwenden, wie in der Dokumentation empfohlen.

https://firebase.google.com/docs/admin/setup

ich die neueste Version bisher verwenden.

compile('com.google.firebase:firebase-admin:4.1.1') 

I Firebase in der Back-End-bin Initialisierung zu überprüfen, um dann die Google-Token ich in dem Front-End bekam Javascript verwenden, und dass ich vorbei an das Back-End in einer POST-Anfrage.

https://firebase.google.com/docs/auth/admin/verify-id-tokens

Das Problem ist, dass Firebase nicht die Anmeldeinformationen zu laden scheint von der Credentials-Datei, die Sie für Ihre Anwendung zum Download haben (wie die Credentials-Datei zu erhalten, ist in dem ersten Link oben dokumentiert und Es ist nur eine JSON-Datei mit Dingen wie type, project_id, private_key usw.).

try (FileInputStream serviceAccount = new FileInputStream(credentialsFilePath)) { 
    FirebaseOptions options = new FirebaseOptions.Builder() 
     .setCredential(FirebaseCredentials.fromCertificate(serviceAccount)) 
     .setDatabaseUrl(databaseURL) 
     .build(); 
    FirebaseApp.initializeApp(options); 
} catch (IOException e) { 
    LOG.error("Firebase credentials file not found"); 
    throw e; 
} 

Es findet auf jeden Fall die Datei, aber wenn ich die Anmeldeinformationen überprüfen haben sie Nullwerte, und wenn ich versuche, das Token ich diese Ausnahme erhalten zu überprüfen.

java.lang.IllegalArgumentException: projectId must be set 
at com.google.common.base.Preconditions.checkArgument(Preconditions.java:122) 
at com.google.firebase.auth.internal.FirebaseTokenVerifier.<init>(FirebaseTokenVerifier.java:50) 
at com.google.firebase.auth.internal.FirebaseTokenVerifier$Builder.build(FirebaseTokenVerifier.java:212) 
at com.google.firebase.auth.FirebaseAuth$2.then(FirebaseAuth.java:156) 
at com.google.firebase.auth.FirebaseAuth$2.then(FirebaseAuth.java:152) 
at com.google.firebase.tasks.ContinueWithCompletionListener$1.run(ContinueWithCompletionListener.java:33) 
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
at java.lang.Thread.run(Thread.java:745) 

Ich habe durch die Dokumentation zu lesen und schaute auf den Beispielen in ihrer GitHub-Repository, aber sie scheinen nicht mit einem vollen Arbeitsbeispiel von Firebase unter Verwendung von Java in einer Web-Anwendung zu haben.

Die Frage ist also, wie kann ich es funktionieren lassen? Wie verwenden Menschen Firebase in diesem Zusammenhang?

Danke.

P.S. 1: Ich verwende die Anwendung nicht in der Google Cloud Platform. Daher kann ich FirebaseCredentials.applicationDefault() nicht verwenden, damit Google die Anmeldeinformationen automatisch lädt.

P.S. 2: Ich musste das Modul "guava-jdk5" aus der Firebase-Abhängigkeit ausschließen, da ich auch feder-data-elasticsearch verwende und es aufgrund eines Abhängigkeitskonflikts nicht funktionierte. Aber ich habe immer noch Guave: 18.0 im Klassenpfad.

Antwort

0

Überprüfen Sie, ob Ihre heruntergeladene Schlüsseldatei aktuell ist oder nicht, versuchen Sie es erneut, wenn Sie nicht sicher sind, überprüfen Sie, ob die Datenbank-URL mit Ihrer projectId aktualisiert wurde oder nicht.

Versuchen Sie Ihre Datei an einem beliebigen Ressourcen dir Kopieren in jedem Ihrer Modul Gläser oder WEB-INF/classes von Build zu kopieren dann verwenden class.getResourceAsStream()

private void initFireBaseServiceAccount() { 
     InputStream serviceAccount = 
       this.getClass().getResourceAsStream("/PROJECTID-firebase-adminsdk-service-account.json"); 

     FirebaseOptions options = new FirebaseOptions.Builder() 
       .setCredential(FirebaseCredentials.fromCertificate(serviceAccount)) 
       .setDatabaseUrl("https://PROJECTID.firebaseio.com") 
       .build(); 

     FirebaseApp.initializeApp(options); 

    } 

Keeping cred Datei in Classpath und Laden es mit class.getResourceAsStream() und Initialisieren FirebaseApp funktionierte für meine App.

Hinweis: Ich bin ein Neuling zu Firebase und getestet, indem Sie Dev-Server in meinem lokalen Computer starten.

Verwandte Themen