Jan Beneš
Jan Beneš

Reputation: 722

Firebase Java admin SDK error

I am trying to verify ID Token of user. Whenever I call the verifyIdToken function the following error is thrown:

java.lang.IllegalArgumentException: projectId must be set

Here is the servlet code:

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

I've been going through documentation and I didn't find a way how to set the project id directly. However I think it shouldn't be necessary in the first place since it's already written in the service_key and database url.

Thanks!

Edit:

Regular Java SDK (non admin) has setApplicationId("PROJECT_ID") function built in FirebaseOptions builder. However there is no such option in Admin SDK

Upvotes: 0

Views: 1250

Answers (1)

Michael Meyer
Michael Meyer

Reputation: 2184

I am initializing my Firebase App a little bit different, see my code

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

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

This is working for me with Admin SDK Version 4.0.4

Upvotes: 1

Related Questions