有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

google应用程序引擎Firebase Java管理SDK错误

我正在尝试验证用户的ID令牌。无论何时调用verifyIdToken函数,都会引发以下错误:

java.lang.IllegalArgumentException: projectId must be set

以下是servlet代码:

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

我查阅了文档,但没有找到直接设置项目id的方法。然而,我认为它一开始就没有必要,因为它已经写在服务密钥和数据库url中了

谢谢

编辑:

常规Java SDK(非管理员)在FirebaseOptions builder中内置了setApplicationId(“项目ID”)函数。但是,在AdminSDK中没有这样的选项


共 (1) 个答案

  1. # 1 楼答案

    我正在初始化我的Firebase应用程序,有点不同,请参阅我的代码

    InputStream in = Thread.currentThread().getContextClassLoader()
                    .getResourceAsStream("/WEB-INF/service_key.json");
    
    FirebaseOptions options = new FirebaseOptions.Builder()
                        .setServiceAccount(in)
                        .setDatabaseUrl(".....")
                        .build();
    

    这对我来说适用于AdminSDK版本4.0.4