2017-02-05 38 views
0

Ich versuche ID-Token des Benutzers zu überprüfen. Jedes Mal, wenn ich die verifyIdToken rufen die folgende Fehlerfunktion ausgelöst:Firebase Java admin SDK-Fehler

java.lang.IllegalArgumentException:

public class GeneratorInfoServlet extends HttpServlet { 
    FirebaseApp app = null; 

    @Override 
    public void init(ServletConfig config) { 
     InputStream serviceAccount = Thread.currentThread().getContextClassLoader() 
       .getResourceAsStream("/WEB-INF/service_key.json"); 

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

     this.app = FirebaseApp.initializeApp(options); 

    } 

    @Override 
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { 
     PrintWriter out = resp.getWriter(); 
     StringBuffer tokenBuffer = new StringBuffer(); 
     String line; 

     try { 
      BufferedReader reader = req.getReader(); 
      while ((line = reader.readLine()) != null) 
       tokenBuffer.append(line); 

      this.verifyToken(tokenBuffer.toString()); 
      out.print("{'success': false}"); 
     } catch (Exception e) { 
      System.err.print(e); 
      out.print("{'success': true}"); 
     } 
    } 

    private void verifyToken(String idToken) { 
     System.out.println(app); 
     FirebaseAuth.getInstance(this.app).verifyIdToken(idToken) 
       .addOnSuccessListener(decodedToken -> { 
        String uid = decodedToken.getUid(); 
        System.out.println(uid); 
       }).addOnFailureListener(e -> System.out.println(e)); 
    } 
} 

Ich habe: projectId muss

Hier ist der Servlet-Code festgelegt werden Ich habe die Dokumentation durchgelesen und keine Möglichkeit gefunden, die Projekt-ID direkt zu setzen. Ich denke jedoch, dass es in erster Linie nicht notwendig sein sollte, da es bereits in der service_key und der Datenbank-URL geschrieben ist.

Danke!

Edit:

Reguläre Java SDK (nicht admin) hat setApplicationId ("PROJECT_ID") Funktion in FirebaseOptions Baumeister gebaut. Allerdings gibt es keine solche Option ist in Admin SDK

Antwort

1

ich ein bisschen anders meine Firebase App bin initialisiert, siehe mein Code

InputStream in = Thread.currentThread().getContextClassLoader() 
       .getResourceAsStream("/WEB-INF/service_key.json"); 

FirebaseOptions options = new FirebaseOptions.Builder() 
        .setServiceAccount(in) 
        .setDatabaseUrl(".....") 
        .build(); 

Dies ist für mich die Arbeit mit Admin SDK Version 4.0.4

+1

I habe das neueste Admin SDK 4.1.1 verwendet, in dem die Methode setServiceAccont veraltet ist. Ich habe versucht, auf deine Version herunterzustufen, nach der ich die NullPointerException erhalte. Es stellte sich heraus, dass der InputStream-Wert null ist und die neuere SDK-Version nicht nach einem Nullwert sucht und den irreführenden Fehler "projectId muss gesetzt" auslöst. Vielen Dank, Ihr Kommentar hat mich auf den Kern des Problems gebracht –

+1

Gah, tut mir Leid! Wir werden dies in einer kommenden Version aktualisieren, so dass wir einen besseren Fehler für diesen Fall werfen. – jwngr

+0

Kein Problem. Vielen Dank –

Verwandte Themen