После импорта firebase в app.js Я инициализировал, но в контроллере firebase.auth.createUserWithEmailAndPassword не является функцией

#node.js #firebase #firebase-authentication #webauthn

#node.js #firebase #firebase-аутентификация #webauthn

Вопрос:

Это в моем app.js где я импортирую firebase и инициализирую его

     const firebase = require('firebase');

    firebase.initializeApp({
      apiKey: ************,
      authDomain: ****************,
      databaseURL: **********",
      projectId: ********,
      storageBucket: ***********,
      messagingSenderId: **********,
      appId: *********,
      measurementId: *********
    });

    app.use( (req, res, next) => {
      firebase.auth().onAuthStateChanged(function(user) {
        if (user) {
            req.session.isLoggedIn = true;
        } else {
            req.session.isLoggedIn = false;
        }
      });
      res.locals.isAuthed = req.session.isLoggedIn;
      res.locals.csrfToken = req.csrfToken();
      next();
    });
  

Но в auth.js Контроллер после импорта firebase он не будет работать

     const firebase = require('firebase');

    exports.postSignup = (req, res, next) => {
     const name = req.body.name;
     const email = req.body.email;
     const password = req.body.password;
     const confirmPassword = req.body.password;

     if(password === confirmPassword){
        
        firebase.auth().createUserWithEmailAndPassword(email, password)
        .then(function(firebaseUser) {
            const user = new User({
                name: name,
                email: email,
                cart: {items: []}
            });
            return user.save();
        })
        .then(result => {
            res.redirect('/login');
        })
        .catch(error => {
            if (error.code == 'auth/email-already-in-use') {
                //'auth/wrong-password'
                req.flash('error', 'Already Registered');
                return res.redirect('/signup');
            }
        });  
    }
  

Возникает эта ошибка
Ошибка типа: firebase.auth.createUserWithEmailAndPassword не является функцией
при экспорте.postSignup (/media/rishav/Пространство проекта /Проекты / Веб-разработка/ Экспресс-узел /Контроллеры/auth.js:95:23)

     const firebase = require('firebase-admin');

    // Fetch the service account key JSON file contents
    const serviceAccount = require("../Data/firebase-service-account.json");

    // Initialize the app with a service account, granting admin privileges
    firebase.initializeApp({
      credential: firebase.credential.cert(serviceAccount),
      databaseURL: "****",
      databaseAuthVariableOverride: null
    });
  

Ответ №1:

Вы, вероятно, хотели сказать:

 firebase.auth().createUserWithEmailAndPassword(...)
  

Обратите внимание на скобки после «auth».

Но большая проблема заключается в том, что вы не должны использовать веб-клиентскую библиотеку Firebase в своем приложении nodejs. Вместо этого вы должны использовать Firebase Admin SDK, который представляет собой совершенно другой модуль и запускается с правами администратора, инициализированными учетной записью службы. Вы можете использовать это для создания учетных записей пользователей в своем бэкэнд-коде.