SDK 更新后出现“firebase.auth 不是函数”错误

rih*_*ihe 2 javascript firebase firebase-authentication

我在网络上使用 Firebase JS sdk 一年了,没有任何问题。从版本更新我的代码5.3.1以使用最新的6.5.0SDK 版本后,我收到以下错误:

TypeError: firebase.auth is not a function
Run Code Online (Sandbox Code Playgroud)

我知道这条消息的意思,但我真的不明白为什么我会得到它。我检查了 firebase 文档,功能和方法名称保持不变。

这是我的旧解决方案:

// HTML
<script src="https://www.gstatic.com/firebasejs/5.3.1/firebase-app.js"></script>
// JS
var config = {
    apiKey: "...",
    authDomain: "...",
    databaseURL: "...",
    projectId: "...",
    storageBucket: "...",
    messagingSenderId: "...",

};

firebase.initializeApp(config);

const email = txtEmail.value;
const pass = txtPassword.value;
const auth = firebase.auth();


firebase.auth().createUserWithEmailAndPassword(email, pass).catch(function(error) {
        var errorCode = error.code;
        var errorMessage = error.message;


        if (errorCode == 'auth/weak-password') {
          showAlert(errorMessage, 'Error!');
        }
        if (errorCode == 'auth/email-already-in-use') {
          showAlert(errorMessage, 'Error!');
        }
        if (errorCode == 'auth/invalid-email') {
          showAlert(errorMessage, 'Error!');
        }
        else {
          // alert(errorMessage);
          //alert(error);
        }
});

firebase.auth().onAuthStateChanged(firebaseUser => {
    if (firebaseUser) {


          $.ajax({
          type: "POST",
          contentType: "application/json",
          url: "/user/",
          data: JSON.stringify({""),
          success: function(data) {

          },
           async: false
          });
Run Code Online (Sandbox Code Playgroud)

这些是代码中不起作用的更改部分:

// HTML
<script src="https://www.gstatic.com/firebasejs/6.5.0/firebase-app.js"></script>
// JS
var config = {
    apiKey: "...",
    authDomain: "...",
    databaseURL: "...",
    projectId: "...",
    storageBucket: "...",
    messagingSenderId: "...",
    appid: "...."
};
Run Code Online (Sandbox Code Playgroud)

只有版本号更改为 6.5.0,并且 appid 已添加到 config 变量中。在更新之前我没有任何 appid,我认为它与新的 Firebase 功能或类似的东西有关。

我的问题是 SDK 的初始化发生了一些变化,比如应该链接更多的 SDK?还是 JS 函数名称改变了?我不明白整个情况,因为在我更改 SDK 版本之前一切正常,所以新 SDK 必须有一些东西。

Ren*_*nec 5

文档中所述(标签“来自 CDN”),firebase-app.js仅导入是不够的:此外,您还需要导入要使用的 Firebase 产品的所有库(Firebase Auth、Firestore 等...) .

因此,在您的情况下,您应该执行以下操作:

<script src="https://www.gstatic.com/firebasejs/X.Y.Z/firebase-app.js"></script>
<script src="https://www.gstatic.com/firebasejs/X.Y.Z/firebase-auth.js"></script>
Run Code Online (Sandbox Code Playgroud)

哪里X.Y.Z是库的版本号,即撰写本文时的 6.6.1。