简体   繁体   中英

firebase.auth().createUserWithEmailAndPassword Undefined is not a function

I am following the firebase documentation on user management

var firebase = require('firebase');

// Initialize Firebase
firebase.initializeApp({
    serviceAccount: "./<mysecreturledittedout>.json",
    databaseURL: "https://<mydatabaseurljusttobesafe>.firebaseio.com"
});

router.get('/create', function(req, res){
    var email = req.email;
    var password = req.password;
    firebase.auth().createUserWithEmailAndPassword(email, password).catch(function(err){ // LINE 27 CRASH
        var errorCode = err.code;
        var errorMessage = error.message;
        console.log("ERROR");
        console.log(errorCode, errorMessage);
    });
});

I get the following error

undefined is not a function

TypeError: undefined is not a function
    at d:\Users\Kitty\Code\Practice2\routes\index.js:27:21

From doing a little bit of research, I think undefined is not a function is basically a javascript version of a null pointer exception (could be wrong)

I have configured my service account and project on firebase. I am running this on localhost. Thanks. I am looking primarily for debugging tips, as I'm not sure how to test what isn't working.

If you haven't fixed the problem yet, I found out why it's giving such an error and that's because it really isn't a function.

You're using the Web reference as your guide when you need to be using the Server reference: https://firebase.google.com/docs/reference/node/firebase.auth.Auth .

As you can see, firebase.auth.Auth is a lot different on the Node.js API when compared to the Web API as there's not a lot in there. Now you have to deal with tokens, which I haven't looked deep into, if using the Server API. On the other hand, you can just use the Web API, which does things you intended to do.

Update
Sometime at or before firebase 3.4.1 for Node.js, createUserWithEmailAndPassword became available.

Original
As of firebase 3.1.0 for Node.js, createUserWithEmailAndPassword is not yet supported. According to a response on the firebase Google group, not all platforms have feature parity in the 3.x libraries yet. The REST interface does support user creation but is clearly a different approach than using the Node.js library.

Go to https://groups.google.com/forum/#!forum/firebase-talk and search for createUserWithEmailAndPassword for the latest on that discussion.

I am not sure this is correct, but it helps:

  1. In console.firebase.google.com get script:

 <script src="https://www.gstatic.com/firebasejs/live/3.0/firebase.js"></script>

and Config:

 var config = { apiKey: "xxxxxxxxxxxxxxx", authDomain: "project-nnnnnnnnnnn.firebaseapp.com", databaseURL: "https://project-nnnnnnnnnnn.firebaseio.com", storageBucket: "project-nnnnnnnnnnn.appspot.com", };

  1. Copy firebase.js file from

 <script src="https://www.gstatic.com/firebasejs/live/3.0/firebase.js"></script>

to local project fb/firebase.js

  1. In firebas-service.ts:

 var firebase = require('./fb/firebase'); // Initialize Firebase var config = { apiKey: "xxxxxxxxxxxxxxx", authDomain: "project-nnnnnnnnnnn.firebaseapp.com", databaseURL: "https://project-nnnnnnnnnnn.firebaseio.com", storageBucket: "project-nnnnnnnnnnn.appspot.com", }; firebase.initializeApp(config); export function createUser (email : string, password:string){ firebase.auth().createUserWithEmailAndPassword(email, password).catch(function(error) { if (error.code){ // Handle Errors here. var errorCode = error.code; var errorMessage = error.message; alert(errorMessage); console.log(errorMessage); } else{ // ... } }); }

Could this be because you defined the error as "err", but under errorMessage, "error.message" was the code? Not quite sure, but try this and see if it fixes:

var firebase = require('firebase');

// Initialize Firebase
firebase.initializeApp({
    serviceAccount: "./<mysecreturledittedout>.json",
    databaseURL: "https://<mydatabaseurljusttobesafe>.firebaseio.com"
});

router.get('/create', function(req, res){
    var email = req.email;
    var password = req.password;
    firebase.auth().createUserWithEmailAndPassword(email, password).catch(function(error){ 
        var errorCode = error.code;
        var errorMessage = error.message;
        console.log("ERROR");
        console.log(errorCode, errorMessage);
    });
});

Question is old and I didn't see any accepted answer. And for the other people who still face the same problem. This is what I did to resolve my issue.

  • Remove the node_modules
  • Remove the firebase from package.json and install the latest firebase npm install --save firebase
  • And run npm install once again so that all other dependencies also get installed

After that add

var firebase = require("firebase/app");
require("firebase/firestore");
require("firebase/auth");

Whatever module you want to use in your project, you can mentioned accordingly. Then initialise the firebase

const firebaseConfig = {
    apiKey: "XXXXXXXXXXXXXXXXXXXXXXX",
    authDomain: "XXXXXXXXXXXXXXX",
    databaseURL: "https://XXXXXX.COM",
    projectId: "XXXXXXXXX",
    storageBucket: "XXXXXXXXX",
    messagingSenderId: "XXXXXXXX",
    appId: "XXXXXXXXXXXXX",
    measurementId: "XXXXXXX"
};
// Initialize Firebase
firebase.initializeApp(firebaseConfig);

Later you can write your API to create user with email and password

app.post('/register', function(req, res) {
    var emailId = req.email
    var password = req.password;
    firebase.auth().createUserWithEmailAndPassword(emailId, password).catch(function(error) {
      // Handle Errors here.
      console.log(error)
    });

})

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM