Проверка подлинности Firebase v9: Объект(…) не является функцией

# #javascript #reactjs #firebase #firebase-authentication

Вопрос:

Мне нужна помощь, я смотрел учебник по firebase и реагирую. а потом я понял, что учебник был для v8, а самый новый-v9

это мое firebase.js

 import { initializeApp } from 'firebase/app';
import { getAuth } from 'firebase/auth';
import { getDatabase } from "firebase/database";

const firebaseConfig = {
  //firebaseconfig
};

const app = initializeApp(firebaseConfig);
const auth = getAuth(app);
const database = getDatabase(app);

export { auth, database }

 

и тогда это мое signin.js фрагмент кода

 import { auth, database } from "../Firebase/firebase";

const submitForm = async (values) => {
   
auth()
.signInWithEmailAndPassword(values.email,values.password)
.then((userCredentials) => {
        props.history.push("/profile");
      }).catch((err) => {  
        setLoading(false);
      });
  };

 

а затем, когда я отправляю свою форму, приложение вылетает с ошибкой
при авторизации().

 Unhandled Rejection (TypeError): Object(...) is not a function
 

Ответ №1:

 import { auth, database } from "../Firebase/firebase";
// this  ^^^^ is not a function but is being used as one
// auth().signInWithEmailAndPassword(values.email,values.password)
// ^^^^ here
 

signInWithEmailAndPassword необходимо импортировать из firebase/auth , как показано ниже:

 import { auth, database } from "../Firebase/firebase";
import { signInWithEmailAndPassword } from "firebase/auth"

const submitForm = async (values) => { 
  const userCredentials = await signInWithEmailAndPassword(auth, values.email, values.password)
  // Pass the 'auth' instance here                         ^^^^
  const { user: { uid } } = userCredentials
  console.log(`userId: ${uid}`)
}
 

Я бы рекомендовал следовать документации вместе с любым учебником. Документация имеет как синтаксис с интервалом между именами (v8), так и модульный/функциональный (v9) синтаксис.

Комментарии:

1. спасибо за быстрый ответ, я пробовал это и, похоже, прочитал не те. Спасибо!!