如何在Spring MVC中使用Firebase Admin SDK

Kirill_code

我不了解如何在Spring MVC Rest服务中配置Firebase Admin。我需要令牌验证。对于测试,我在控制器中使用了它:

@RequestMapping(value = "/test", method = RequestMethod.GET)
@ResponseBody
public  List<Subscription> getTest(@RequestHeader("token") String idToken) throws FirebaseAuthException {

    String DATABASE_URL = "https://name.firebaseio.com/";

    try {
        ClassLoader classLoader = getClass().getClassLoader();
        InputStream inputStream = classLoader.getResourceAsStream("token.json");

        FirebaseOptions options = new FirebaseOptions.Builder()
        .setCredentials( GoogleCredentials.fromStream(inputStream))
                .setDatabaseUrl(DATABASE_URL)
                .build();
        FirebaseApp.initializeApp(options);
    } catch (IOException e) {
        e.printStackTrace();
        System.out.println("Error loading database");
    }


        FirebaseToken decodedToken = FirebaseAuth.getInstance().verifyIdToken(idToken);
        String uid = decodedToken.getUid();

       return service.getAll();
}

但是它返回java.lang.IllegalStateException:FirebaseApp名称[DEFAULT]已经存在!当我发送多个请求时。

我的问题是,我不了解如何对每个请求进行验证。

我使用模型服务存储库控制器

弗兰克·范普菲伦

现在,您的代码尝试FirebaseApp为每个请求初始化这不是必需的,实际上是不允许的(如错误消息所示)。最简单的解决方法是检查是否FirebaseApp已使用初始化:

if (FirebaseApp.getApps().isEmpty()) {
    String DATABASE_URL = "https://name.firebaseio.com/";
    try {
        ClassLoader classLoader = getClass().getClassLoader();
        InputStream inputStream = classLoader.getResourceAsStream("token.json");

        FirebaseOptions options = new FirebaseOptions.Builder()
        .setCredentials( GoogleCredentials.fromStream(inputStream))
                .setDatabaseUrl(DATABASE_URL)
                .build();
        FirebaseApp.initializeApp(options);
    } catch (IOException e) {
        e.printStackTrace();
        System.out.println("Error loading database");
    }
}
FirebaseToken decodedToken = FirebaseAuth.getInstance().verifyIdToken(idToken);
String uid = decodedToken.getUid();

return service.getAll();

但这仍然会检查FirebaseApp每个调用,并且说实话只是使此方法的代码超出了需要。因此,最好绑定控制器的生命周期,并运行FirebaseApp仅在创建控制器时初始化的代码我对Spring不够了解,无法回答如何做,但是本文显示了一些有前途的方法。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在Flutter中使用Firebase Admin SDK?

如何在Angular应用程序中使用Firebase Admin SDK?

如何使用TypeScript在Cloud函数中使用Admin SDK从Firebase读取数据

如何从 Admin SDK 从 Firebase Messaging 导入接口?

如何从 Admin SDK 创建 Firebase 动态链接

如何使用 python 使用 firebase admin sdk 验证登录

在firebase-database-dotnet中使用Firebase Admin SDK

Firebase Admin SDK Android

如何使用云功能通知Firebase Admin SDK用户?

我如何在Spring Admin中使用JobLauncherSynchronizer

如何使Firebase Admin SDK帐户遵守验证规则?

如何从Admin SDK检查与Firebase服务器的连接?

Firebase Admin SDK:setCredential() 的 NoSuchMethodError

Firebase python admin sdk isNewUser()

Python Firebase Admin SDK - DefaultCredentialsError

Firebase JAVA admin sdk FirebaseAuthException

如何在Java REST API中初始化Firebase Admin SDK?

如何在Firebase Admin.messaging()SDK中设置“ collapse_key”?

如何在Cloud Function中初始化Firebase Admin SDK(Python)

在节点中同时使用Firebase Admin SDK和Client SDK

如何通过使用Node.js的Web应用程序正确使用Firebase Admin SDK?

如何在Firestore上以有限的权限使用Admin SDK?

Cloud Firestore-Python-如何在使用admin sdk流式传输的文档中获取本地时区

如何在Firebase Messaging Web SDK中使用通知操作

如何在Nativescript中使用SDK Firebase(Android)

对于Firebase admin SDK 5.4及更高版本,如何从不推荐使用的任务迁移到ApiFuture

如何使用Admin SDK为数据库触发器设置Firebase FCM

如何使用admin SDK将文件上传到带有路径的Firebase的云存储中?

使用Firebase Admin SDK更新用户时超出了配额-如何请求更多?