Как использовать Firebase Admin SDK в Spring MVC

Как уже указывалось, вы пытаетесь создать реляционную базу данных из какой-либо реляционной базы данных, которую вы действительно не хотите делать, но в любом случае, если у вас есть случай, когда вы должны это сделать, это решение, которое вы можете использовать , Сначала мы делаем поиск foreach в коллекции A (или в вашем случае пользователей), и затем мы получаем каждый элемент как объект, тогда мы используем свойство объекта (в вашем случае uid) для поиска в нашей второй коллекции (в ваших комментариях к случаю), если мы может найти его, тогда у нас есть совпадение, и мы можем печатать или что-то делать с ним. Надеюсь, это поможет вам и удачи:)

db.users.find().forEach(
function (object) {
    var commonInBoth=db.comments.findOne({ "uid": object.uid} );
    if (commonInBoth != null) {
        printjson(commonInBoth) ;
        printjson(object) ;
    }else {
        // did not match so we don't care in this case
    }
});
0
задан Kirill_code 17 January 2019 в 14:32
поделиться

1 ответ

Прямо сейчас ваш код пытается инициализировать 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, чтобы ответить, как это сделать, но в этой статье показаны некоторые многообещающие подходы.

0
ответ дан Frank van Puffelen 17 January 2019 в 14:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: