У меня есть приложение 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
во втором, не запрашивая учетные данные?
Каждый экземпляр инициализированного приложения имеет собственную аутентификацию. Нельзя, чтобы один экземпляр приложения обращался к другому приложению, чтобы получить его данные аутентификации. Таким образом, вам нужно будет использовать API Firebase Auth для входа пользователя во второй экземпляр приложения отдельно. Поскольку вы используете signInWithEmailAndPassword
, похоже, вам придется где-то хранить учетные данные пользователя, пока вы не сможете снова вызвать initializeApp
с ними по мере необходимости.
Если вам нужен пользовательский вход с токеном, вам необходимо задействовать серверную часть, которая выдает токен для пользователя с помощью Firebase Admin SDK. Таким образом, вашему клиентскому приложению потребуется вызвать этот бэкенд, чтобы запросить пользовательский токен, и использовать его для входа в другой экземпляр приложения. Документация для этого находится здесь: firebase.google.com/docs/auth/admin/create-custom-tokens
Да, похоже, это лучший подход к рассматриваемой проблеме.
Спасибо за ответ. Нет ли другого метода авторизации? Я видел, что есть метод входа в систему с помощью токена. Могу ли я выдать токен, который действителен для аутентификации? Хранение пароля во внешнем интерфейсе не кажется ортодоксальным