Аутентификация пользователей между приложениями Firebase

У меня есть приложение React с аутентификацией и хранилищем firebase

Следуя моему предыдущему вопросу о нескольких приложениях Firebase здесь, у меня закончилось несколько приложений firebase внутри моего проекта.

У меня инициализировано приложение DEFAULT

firebase.initializeApp({
  apiKey: 'xxxxxxxxxxxxxxxxxxxx',
  authDomain: 'buckettest-xxxxx.firebaseapp.com',
  projectId: 'buckettest-xxxxx',
  storageBucket: 'buckettest-xxxxx.appspot.com',
  messagingSenderId: 'xxxxxxxxxxxxxxxxxxxx',
  appId: 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx',
  measurementId: 'G-QZDBHEWHJ5',
});

Пользователи входят в систему с помощью электронной почты и пароля, используя метод signInWithEmailAndPassword из firebase.auth() из приложения DEFAULT выше.

В компоненте я создаю дополнительное приложение firebase, которое подключается к другому сегменту хранилища следующим образом.

const createStoreApp = (bucket) => {
  const firebaseStoreApp = firebase.apps.length === 1
    ? firebase.initializeApp({
      storageBucket: bucket.name,
      apiKey: 'xxxxxxxxxxxxxxxxxxxx',
      authDomain: 'buckettest-xxxxx.firebaseapp.com',
      projectId: 'buckettest-xxxxx',
      storageBucket: 'buckettest-xxxxx.appspot.com',
      messagingSenderId: 'xxxxxxxxxxxxxxxxxxxx',
      appId: 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx',
      measurementId: 'G-QZDBHEWHJ5',
    }, 'storage')
    : firebase.apps[1];

  return firebaseStoreApp;
};

Это решение работает отлично, НО есть проблема, что в этом дополнительном приложении нет аутентифицированного пользователя.

Есть ли способ аутентифицировать currentUser из экземпляра приложения DEFAULT во втором, не запрашивая учетные данные?

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
0
53
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Каждый экземпляр инициализированного приложения имеет собственную аутентификацию. Нельзя, чтобы один экземпляр приложения обращался к другому приложению, чтобы получить его данные аутентификации. Таким образом, вам нужно будет использовать API Firebase Auth для входа пользователя во второй экземпляр приложения отдельно. Поскольку вы используете signInWithEmailAndPassword, похоже, вам придется где-то хранить учетные данные пользователя, пока вы не сможете снова вызвать initializeApp с ними по мере необходимости.

Спасибо за ответ. Нет ли другого метода авторизации? Я видел, что есть метод входа в систему с помощью токена. Могу ли я выдать токен, который действителен для аутентификации? Хранение пароля во внешнем интерфейсе не кажется ортодоксальным

Sabbin 14.12.2020 19:49

Если вам нужен пользовательский вход с токеном, вам необходимо задействовать серверную часть, которая выдает токен для пользователя с помощью Firebase Admin SDK. Таким образом, вашему клиентскому приложению потребуется вызвать этот бэкенд, чтобы запросить пользовательский токен, и использовать его для входа в другой экземпляр приложения. Документация для этого находится здесь: firebase.google.com/docs/auth/admin/create-custom-tokens

Doug Stevenson 14.12.2020 20:46

Да, похоже, это лучший подход к рассматриваемой проблеме.

Sabbin 15.12.2020 08:47

Другие вопросы по теме