Я создал функцию без сервера, которая выполняет Проверка токена Firebase .
Все работает как задумано. За исключением того, что я получаю ошибки при последующих вызовах, чтобы инициализировать мое приложение, что приложение по умолчанию уже существует (тот же контейнер). Это поднимает некоторые вопросы.
- Если бы в моей серверной инфраструктуре было несколько параллельных контейнеров, каждый из которых работал над инициализацией приложения. Будет ли это также вызвать эту ошибку? Что приложение инициализировано в другом месте? Или эта ошибка изолирована для локальных экземпляров?
- Если это последнее, если я предоставляю именованное приложение на основе контейнера, в котором оно запускается, есть ли ограничение на максимальный уровень приложений, которое можно инициализировать одновременно?
Вот как я сейчас инициализирую приложение:
cred = credentials.Certificate(SERVICE)
firebase_admin.initialize_app(cred)
Я мог бы сделать это, но не уверен насчет ограничений приложений Firebase или одновременных инициализаций (не могу найти какие-либо подробности в документации):
cred = credentials.Certificate(SERVICE)
firebase_admin.initialize_app(cred, 'APP-NAME-[CONTAINERID]')
Или я должен просто переписать это, используя свой собственный JWT Decoder и получить открытые ключи от Google?
А вот и полная ошибка:
Error occurred setting firebase credentials: The default Firebase app already exists. This means you called initialize_app() more than once without providing an app name as the second argument. In most cases you only need to call initialize_app() once. But if you do want to initialize multiple apps, pass a second argument to initialize_app() to give each app a unique name.
ОБНОВЛЕНИЕ: AWS Lambda, Python.
Я собираюсь протестировать следующее, чтобы предотвратить повторную инициализацию приложения в том же контейнере при выполнении «горячих» функций, и двигаться вперед с предположением, что для выполнения auth.validate_id_token()
нет ограничений API и что это выиграло » конфликтует с одновременным выполнением контейнера. Я доложу, если получится иначе.
try:
firebase_admin.get_app()
logger.info('firebase already intialized.')
except ValueError as e:
logger.info('firebase not initialized. initialize.')
cred = credentials.Certificate(SERVICE)
firebase_admin.initialize_app(cred)
Я, вероятно, все еще буду переходить на другую проверку JWT, чтобы уменьшить размер функции (так как у меня уже есть библиотека jwt для собственного использования приложения), и перейду от использования Firebase API для его декодирования.