【问题标题】:firebase.auth is not a function - with multiple firebase app initializationfirebase.auth 不是一个函数 - 具有多个 firebase 应用程序初始化
【发布时间】:2019-03-24 23:15:09
【问题描述】:

我收到错误“未捕获的类型错误:firebase.auth 不是函数”。

我的代码运行良好,然后我实现了我的客户 api,发现他们的 api 已经使用并初始化了一个不同的 firebase 应用程序。因此,由于我无法以通常的方式(即 firebase.initializeApp(config) )初始化我的 firebase 应用程序,因此我遵循了有关初始化多个 firebase 应用程序的文档,如下所示。 (这会导致错误)

var configOther = {
apiKey: "xxxx",
authDomain: "xxxx",
databaseURL: "xxxx",
projectId: "xxxx",
storageBucket: "xxxx",
messagingSenderId: "xxxx"
};

var firebaseOther = firebase.initializeApp(configOther, "firebaseOther");

console.log("auth: ", firebase.auth(firebaseOther)); //"Uncaught TypeError: firebase.auth is not a function"

关于我在这里做错了什么有什么想法吗?非常感谢。

注意 - 我还尝试了以下速记符号:

firebaseOther.auth() 

而不是

firebase.auth(firebaseOther)

但这会导致同样的错误。

【问题讨论】:

  • 您是否为 auth 添加了适当的 Firebase 脚本/模块?
  • 目前我只包括所有使用的firebase服务:
  • 我将使用缩减的firebase-app.js 文件检查任何其他<script> 标签,因为这将覆盖firebase 变量。还要检查firebase = ...的任何使用
  • 原来有,这就是我所做的。我现在已经设法让两个 Firebase 应用程序都初始化并正常运行 - 感谢您的帮助。

标签: javascript firebase firebase-authentication


【解决方案1】:

您可能跳过了在页面中包含 firebase-auth 脚本的步骤,如 documentation 所述:

<!-- Firebase App is always required and must be first -->
<script src="https://www.gstatic.com/firebasejs/5.9.1/firebase-app.js"></script>

<!-- Add additional services that you want to use -->
<script src="https://www.gstatic.com/firebasejs/5.9.1/firebase-auth.js"></script>

【讨论】:

  • 看起来 OP 包含完整的 Firebase 包
  • 是的,我是 - 虽然我刚刚更改了它以便我只包括相关的,但我仍然收到错误。我想知道我的客户的 api 是否有可能随后重新加载 firebase 包,然后不包括 auth 脚本,但我什至不确定如何检查,因为我无权访问他们的 api。
  • 使用浏览器的开发者工具查看加载的顺序。
  • 谢谢 - 我现在已经完成了,我可以看到他们正在加载 gstatic.com/firebasejs/5.5.7/firebase-app.js 在我之后,他们不包括身份验证脚本。所以我想这就是问题的根源。
【解决方案2】:

唯一的解释是在页面的某处,有另一个&lt;script&gt;标签引用了firebase-app.js文件,例如

<script src="https://www.gstatic.com/firebasejs/5.9.1/firebase-app.js"></script>

此标记将在您包含firebase.jsfirebase-app.jsfirebase-auth.js 之后出现

发生的情况是包含 firebase-app.js 设置全局 firebase 变量的值,覆盖之前设置的任何内容。

解决方案是删除重复的 Firebase 脚本包含,或者至少确保最后包含您想要激活的脚本。

【讨论】:

  • 确实有道理。删除重复的脚本包含不是一个选项 - 这是在我的客户端 api 中。而且我不确定如何确保我的包含内容排在最后,因为我的客户端的 api 似乎是异步加载的,所以即使我在将他们的脚本加载到 html 之后进行包含,他们的 firebase 初始化仍在我之后发生.
【解决方案3】:

我有一个类似的问题,通过在文档给出的 HTML 中删除 defer 解决了这个问题:

        <script src="https://www.gstatic.com/firebasejs/7.17.2/firebase-app.js"></script>
        <script defer src="https://www.gstatic.com/firebasejs/7.17.2/firebase-auth.js"></script>
        <script defer src="https://www.gstatic.com/firebasejs/7.17.2/firebase-firestore.js"></script>

【讨论】:

    猜你喜欢
    • 2018-07-11
    • 2018-07-16
    • 1970-01-01
    • 2023-04-09
    • 2019-03-26
    • 2021-04-06
    • 2017-11-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多