Я пытаюсь использовать эмулятор аутентификации Firebase и обнаружил, что даже при запущенном и включенном эмуляторе аутентификация происходит на производстве.

У меня есть следующее в firebase/auth.js

// импорт и прочее...

firebase.initializeApp(firebaseConfig);

export const firebaseAuth = firebase.auth()
if (DEBUG_MODE) {
    firebaseAuth.useEmulator('http://localhost:9099');
}

// объявляем класс, чтобы облегчить насмешку... может быть, я просто не знаю, как правильно насмехаться над константами?
export class FirebaseAuth {
    static getAuth() {
        return firebaseAuth
    }
}

Тогда у меня есть компонент SignIn, точно такой же, как пример SignInScreen, найденный на https://github.com/firebase/firebaseui-web-react#using-styledfirebaseauth-with-local-state - хотя разница в том, что этот компонент использует firebaseAuth, который экспортируется из auth.js, показанного выше.

import React from 'react';
import StyledFirebaseAuth from 'react-firebaseui/StyledFirebaseAuth';
import { uiConfig, FirebaseAuth } from '../firebase/auth';
import { useQuery } from '../hooks';

function SignIn() {
    let params = useQuery()
    let redirectUrl = params.get('redirect_url');
    const config = Object.assign({}, uiConfig, {signInSuccessUrl: redirectUrl})
    return (
        

Please sign-in:

); } export default SignIn

Когда я запускаю свое приложение react локально, я вижу, что firebase обнаруживает эмулятор на основе этого сообщения, показанного в нижней части моего приложения:

введите описание изображения здесь

Однако я обнаружил, что при попытке войти в систему используется производственный экземпляр firebase auth. Новые пользователи создаются на https://console.firebase.google.com/u/0/project/sagereact/authentication/users, а не на моем локальном эмуляторе.

Дополнительно, я вижу следующую строку журнала, когда я делаю жесткое обновление моего веб-приложения, которое также выводит меня из системы:

⚠  Received a signed JWT. Auth Emulator does not validate JWTs and IS NOT SECURE

Я проверил, что мой эмулятор работает:

 ❮❮❮ firebase emulators:start
i  emulators: Starting emulators: auth, functions, firestore, database, hosting, pubsub
...stuff

┌────────────────────────────────────────────────────────────────┐
│ ✔  All emulators ready! View status and logs at localhost:4000 │
└────────────────────────────────────────────────────────────────┘

┌────────────────┬────────────────┬──────────────────────────┐
│ Emulator       │ Host:Port      │ View in Emulator UI      │
├────────────────┼────────────────┼──────────────────────────┤
│ Authentication │ localhost:9099 │ localhost:4000/auth      │
├────────────────┼────────────────┼──────────────────────────┤
│ Functions      │ localhost:5001 │ localhost:4000/functions │
├────────────────┼────────────────┼──────────────────────────┤
│ Firestore      │ localhost:8080 │ localhost:4000/firestore │
├────────────────┼────────────────┼──────────────────────────┤
│ Database       │ localhost:9000 │ localhost:4000/database  │
├────────────────┼────────────────┼──────────────────────────┤
│ Hosting        │ localhost:5055 │ n/a                      │
├────────────────┼────────────────┼──────────────────────────┤
│ Pub/Sub        │ localhost:8085 │ n/a                      │
└────────────────┴────────────────┴──────────────────────────┘
  Other reserved ports: 4400, 4500

Issues? Report them at https://github.com/firebase/firebase-tools/issues and attach the *-debug.log files.

и

введите описание изображения здесь

Как выяснить, почему firebase не использует мой локальный эмулятор для аутентификации?

Ответы (1)

Вам нужно настроить эмулятор Auth из клиентского кода. Вот эквивалент в Dart с использованием Flutter:

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  var app = await Firebase.initializeApp();

  if (USE_FIRESTORE_EMULATOR) {
    FirebaseFirestore.instance.settings = Settings(host: 'localhost:8080', sslEnabled: false, persistenceEnabled: false);
    FirebaseFunctions.instance.useFunctionsEmulator(origin: 'http://localhost:5001');
    FirebaseAuth.instanceFor(app: app).useEmulator('http://localhost:9099');
  }

Для firebaseui-web-react посмотрите этот Pull Request (https://github.com/firebase/firebaseui-web-react/pull/125) и убедитесь, что у вас правильная версия.

2022 WebDevInsider