Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Firebase.auth().useEmulator is not a function

I currently have a project set up through VueCLI and firebase-tools and can't seem to be able to attach the Firebase Auth emulator to my project locally.

My Firebase Set-up file:

import firebase from 'firebase/app';
import 'firebase/auth';
import 'firebase/firestore';
import 'firebase/storage';

const configOptions = {
    apiKey: process.env.VUE_APP_FIREBASE_API_KEY,
    authDomain: process.env.VUE_APP_FIREBASE_AUTH_DOMAIN,
    databaseURL: process.env.VUE_APP_FIREBASE_DB_URL,
    projectId: process.env.VUE_APP_FIREBASE_PROJECT_ID,
    storageBucket: process.env.VUE_APP_FIREBASE_STORAGE_BUCKET,
    messagingSenderId: process.env.VUE_APP_FIREBASE_MESSAGING_SENDER_ID,
    appId: process.env.VUE_APP_FIREBASE_APP_ID,
    measurementId: process.env.VUE_APP_FIREBASE_MEASUREMENT_ID
};

firebase.initializeApp(configOptions);

if (process.env.NODE_ENV === "development"){
    firebase.firestore().settings({ host: 'localhost:8080', ssl: false });
    firebase.auth().useEmulator('http://localhost:9099/');
}

export const firebaseauth = firebase.auth();
export const firestore = firebase.firestore();
export const firebasestorage = firebase.storage();
export default firebase;

My .env.development file

VUE_APP_I18N_LOCALE=en
VUE_APP_I18N_FALLBACK_LOCALE=en

VUE_APP_FIREBASE_API_KEY="xx"
VUE_APP_FIREBASE_AUTH_DOMAIN="localhost:9099"
VUE_APP_FIREBASE_DB_URL="http://localhost:4000"
VUE_APP_FIREBASE_PROJECT_ID="xx"
VUE_APP_FIREBASE_STORAGE_BUCKET="xx"
VUE_APP_FIREBASE_MESSAGING_SENDER_ID="xx"
VUE_APP_FIREBASE_APP_ID="xx"
VUE_APP_FIREBASE_MEASUREMENT_ID="xx"

When navigating to localhost:5000 (emulated hosting), I get the error:

Uncaught TypeError: firebase_app__WEBPACK_IMPORTED_MODULE_0___default.a.auth(...).useEmulator is not a function

useEmulator comes directly from Google's Firebase Documentation so I'm unsure what I'm doing incorrectly.

like image 914
pandavenger Avatar asked Nov 12 '20 20:11

pandavenger


3 Answers

It may be that you're still using a firebase version older than version 8.0.0, in that case the method you'd want to call is the .useFunctionsEmulator method (deprecated since v8.0.0):

firebase.functions().useFunctionsEmulator('http://localhost:5001');

If you are using the v8 SDK, however, here is how you can connect your app to the emulator:

firebase.auth().useEmulator("http://localhost:9099"); // Connect to the Authentication emulator

firebase.functions().useEmulator("localhost", 5001); // Connect to the Cloud Functions emulator
like image 136
dzv3 Avatar answered Oct 01 '22 11:10

dzv3


With the JS SDK v9, you'll need to use connectFirestoreEmulator function.

See docs https://firebase.google.com/docs/emulator-suite/connect_firestore

import { initializeApp } from "firebase/app";
import { getFirestore, connectFirestoreEmulator } from "firebase/firestore";

const config = {} //your config object here

const app = initializeApp(config);

// firebaseApps previously initialized using initializeApp()
const db = getFirestore();
connectFirestoreEmulator(db, 'localhost', 8080);

like image 29
ufmemo Avatar answered Oct 01 '22 11:10

ufmemo


ufmemo's solution is correct.

A more detailed answer would be as follows.

// import 'firebase/auth';
import { connectAuthEmulator } from "firebase/auth";

if (process.env.NODE_ENV === "development"){
    firebase.firestore().settings({ host: 'localhost:8080', ssl: false });
    // firebase.auth().useEmulator('http://localhost:9099/');
    connectAuthEmulator(firebase, 'http://localhost:9099/');
}
like image 23
Takeru Nezu Avatar answered Oct 01 '22 10:10

Takeru Nezu