java - Firebase Java 管理 SDK 错误

标签 java google-app-engine firebase firebase-admin

我正在尝试验证用户的 ID token 。每当我调用 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 的方法。不过我认为一开始就没有必要,因为它已经写在 service_key 和数据库 url 中了。

谢谢!

编辑:

常规 Java SDK(非管理员)在 FirebaseOptions 构建器中内置了 setApplicationId("PROJECT_ID") 函数。但是Admin SDK中没有这样的选项

最佳答案

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

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

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

这对我来说适用于 Admin SDK 版本 4.0.4

关于java - Firebase Java 管理 SDK 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42054681/

相关文章:

java - android项目的基本文件夹的路径是什么?

java - 如何在java中删除嵌套的JSONObject键和值

java - 正则表达式模式包含单个空格但没有前导或尾随空格?

google-app-engine - 应用引擎 : How to "reset" the datastore?

firebase - 由于权限错误,无法部署 Firebase 云功能

firebase - 在 iOS 上注销和登录 firebase 身份验证后,Firestore 调用 setData 将不会进入完成 block

java - 从 BaseAdapter 类型类启动 Activity

java - com.google.appengine.tools.development.agent.runtime.Runtime 类无法访问该类的成员

google-app-engine - 如何在 Golang 中定义未索引的数据存储属性?

ios - Firebase 通知适用于 android,不适用于 ios(ionic 3)