【问题标题】:firebase.auth().createUserWithEmailAndPassword Undefined is not a functionfirebase.auth().createUserWithEmailAndPassword Undefined 不是函数
【发布时间】:2016-09-27 00:46:24
【问题描述】:

我正在关注关于用户管理的 firebase 文档

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);
    });
});

我收到以下错误

undefined is not a function

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

通过一点点研究,我认为 undefined is not a function 基本上是javascript版本的空指针异常(可能是错误的)

我已经在 firebase 上配置了我的服务帐号和项目。我在本地主机上运行它。谢谢。我主要是在寻找调试技巧,因为我不确定如何测试什么不起作用。

【问题讨论】:

  • 同stackoverflow.com/questions/37485998/…(还没有答案)。
  • @FrankvanPuffelen 抱歉,还没有看到这个问题。
  • 我找到了一种解决方法,使用来自客户端的匿名用户身份验证。请详细说明您的用例,以便我可以据此编写答案。
  • @NiwinSanthosh 您好,感谢您的意见。最终发生的事情是我完全转储了 nodejs 服务器端代码来构建我的网络应用程序并使用 firebase 静态托管。使用静态网络身份验证对我来说更容易。然而,自从提出这个问题后,我一直在回顾服务器端,因为我想发送自定义电子邮件,但 firebase 已弃用此功能:( .

标签: javascript node.js express firebase firebase-authentication


【解决方案1】:

问题很旧,我没有看到任何可接受的答案。对于仍然面临同样问题的其他人。这就是我为解决我的问题所做的。

  • 删除 node_modules
  • 从 package.json 中删除 firebase 并 安装最新的 firebase npm install --save firebase
  • 并再次运行 npm install 以便所有其他依赖项也得到 已安装

然后添加

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

无论您想在项目中使用什么模块,您都可以相应地提及。然后初始化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);

稍后您可以编写您的 API 以使用电子邮件和密码创建用户

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)
    });

})

【讨论】:

    【解决方案2】:

    更新
    在适用于 Node.js 的 firebase 3.4.1 或之前的某个时间,createUserWithEmailAndPassword 可用。

    原创
    从 Node.js 的 firebase 3.1.0 开始,尚不支持 createUserWithEmailAndPassword。根据 firebase Google 小组的回复,并非所有平台都在 3.x 库中具有同等功能。 REST 接口确实支持用户创建,但显然是与使用 Node.js 库不同的方法。

    转到 https://groups.google.com/forum/#!forum/firebase-talk 并搜索 createUserWithEmailAndPassword 以获取有关该讨论的最新信息。

    【讨论】:

    【解决方案3】:

    我不确定这是否正确,但它会有所帮助:

    1. 在 console.firebase.google.com 中获取 脚本:

    &lt;script src="https://www.gstatic.com/firebasejs/live/3.0/firebase.js"&gt;&lt;/script&gt;

    和配置:

    var config = {
        apiKey: "xxxxxxxxxxxxxxx",
        authDomain: "project-nnnnnnnnnnn.firebaseapp.com",
        databaseURL: "https://project-nnnnnnnnnnn.firebaseio.com",
        storageBucket: "project-nnnnnnnnnnn.appspot.com",
    };
    1. 从
    2. 复制 firebase.js 文件

    &lt;script src="https://www.gstatic.com/firebasejs/live/3.0/firebase.js"&gt;&lt;/script&gt;

    到本地项目 fb/firebase.js

    1. 在 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{
                // ...
            }
        });
    }

    【讨论】:

    【解决方案4】:

    如果你还没有解决这个问题,我发现它为什么会出现这样的错误,那是因为它真的不是一个函数。

    当您需要使用服务器参考时,您将使用 Web 参考作为您的指南:https://firebase.google.com/docs/reference/node/firebase.auth.Auth。

    如您所见,与 Web API 相比,Node.js API 上的 firebase.auth.Auth 有很大不同,因为其中并没有太多区别。现在,如果使用服务器 API,您必须处理我没有深入研究过的令牌。另一方面,您可以只使用 Web API,它会做您想做的事情。

    【讨论】:

      【解决方案5】:

      这可能是因为您将错误定义为“err”,但在 errorMessage 下,“error.message”是代码?不太确定,但试试这个,看看它是否修复:

      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);
          });
      });
      

      【讨论】:

      • 抱歉没有解决问题。我将它们全部更改为err。感谢您的宝贵时间
      猜你喜欢
      • 2019-07-24
      • 2019-06-24
      • 2018-07-13
      • 2017-03-08
      • 2021-02-24
      • 2018-10-13
      • 2018-11-25
      • 2018-08-17
      • 2017-01-13
      相关资源
      最近更新 更多