Firebase 无需身份验证即可初始化 - firebase.auth 不是函数

2024-04-28

我无法弄清楚为什么我的一个 Firebase 应用程序使用 auth() 进行初始化,而另一个则没有。我在这里遵循了节点安装选项:https://firebase.google.com/docs/web/setup https://firebase.google.com/docs/web/setup

**编辑:** 澄清一下,有效的方法也是在 firebase 函数中使用 admin sdk。但是,我不明白如何将其连接到前端客户端 sdk 接口。

每当我尝试在没有它的情况下初始化的应用程序上调用任何 firebase.auth() 方法时,我都会不断收到错误。

有哪些原因会阻止我的应用程序在没有 auth() 的情况下初始化?我已经仔细阅读了代码,并相信两者都以相同的方式合并了 firebase,但我一定错过了一些东西?

导致错误的示例函数

firebase.auth().onAuthStateChanged(function(user) {
    if (user) {
        console.log("User signed in!", user);
    } else {
        console.log("User NOT signed in!");
    }
});

结果错误

index.js:40 Uncaught TypeError: firebase.auth is not a function
    at Object.<anonymous> (index.js:40)
    at __webpack_require__ (bootstrap 06efabd01e08e38c858a:19)
    at bootstrap 06efabd01e08e38c858a:62
    at bootstrap 06efabd01e08e38c858a:62
(anonymous) @ index.js:40
__webpack_require__ @ bootstrap 06efabd01e08e38c858a:19
(anonymous) @ bootstrap 06efabd01e08e38c858a:62
(anonymous) @ bootstrap 06efabd01e08e38c858a:62

应用程序 1 - 初始化 我已将我的数据替换为 xxx

var firebase = require('firebase/app');
require('firebase/auth');
var config = {
    apiKey: "xxx",
    authDomain: "xxx.firebaseapp.com",
    databaseURL: "https://xxx.firebaseio.com",
    projectId: "xxx",
    storageBucket: "xxx.appspot.com",
    messagingSenderId: "xxx"
};
firebase.initializeApp(config);
console.log("FIREBASE: ", firebase);

应用程序 1 - Firebase 对象的控制台日志 请注意“auth”存在

{__esModule: true, initializeApp: ƒ, app: ƒ, Promise: ƒ, …}
INTERNAL
:
{registerService: ƒ, createFirebaseNamespace: ƒ, extendNamespace: ƒ, createSubscribe: ƒ, ErrorFactory: ƒ, …}
Promise
:
ƒ Promise()
SDK_VERSION
:
"4.9.0"
User
:
ƒ Bk(a,b,c)
app
:
ƒ app(name)
apps
:
(...)
auth
:
ƒ (appArg)
default
:
{__esModule: true, initializeApp: ƒ, app: ƒ, Promise: ƒ, …}
initializeApp
:
ƒ initializeApp(options, name)
__esModule
:
true
get apps
:
ƒ getApps()
__proto__
:
Object

应用程序 1 - 包括服务器端管理 sdk 功能

var serviceAccount = require("./xxxxx62ba.json");

// Initialize the firebase admin app
admin.initializeApp({
  credential: admin.credential.cert(serviceAccount),
  databaseURL: "https://xxx.firebaseio.com"
});

应用程序 2 - 初始化 我已将我的数据替换为 xxx

var firebase = require('firebase/app');
require('firebase/auth');
var config = {
    apiKey: "xxx",
    authDomain: "xxx.firebaseapp.com",
    databaseURL: "https://xxx.firebaseio.com",
    projectId: "xxx",
    storageBucket: "xxx.appspot.com",
    messagingSenderId: "xxx"
};
firebase.initializeApp(config);

应用程序 2 - Firebase 对象的控制台日志 请注意,缺少“auth”

{__esModule: true, initializeApp: ƒ, app: ƒ, Promise: ƒ, …}
INTERNAL
:
{registerService: ƒ, createFirebaseNamespace: ƒ, extendNamespace: ƒ, createSubscribe: ƒ, ErrorFactory: ƒ, …}
Promise
:
ƒ Promise()
SDK_VERSION
:
"4.9.0"
app
:
ƒ app(name)
apps
:
(...)
default
:
{__esModule: true, initializeApp: ƒ, app: ƒ, Promise: ƒ, …}
initializeApp
:
ƒ initializeApp(options, name)
__esModule
:
true
get apps
:
ƒ getApps()
__proto__
:
Object

Update: 我最近又开始遇到这个错误。 Firebase 再次在没有身份验证的情况下进行初始化(参见图片)。当我更新或重新安装我的node_modules时,它似乎偶尔发生。

我在以下链接中发布了类似问题的更新答案 - 其中还列出了其他人尝试过的其他几个潜在解决方案。我的修复涉及从我的 Mac 中完全删除 npm、nvm 和 node,并使用 nvm 进行全新安装:firebase.auth 不是函数 https://stackoverflow.com/questions/48592656/firebase-auth-is-not-a-function/54427116#54427116


我为此苦苦挣扎了3天,尝试了各种不同的方式来实现sdk,完全按照文档和许多其他示例,终于找到了一个有效的示例。这个 git 存储库有一个很棒且非常简单的示例,类似于我的 React-router v4 设置。tylermcginnis/react-router-firebase-auth https://github.com/tylermcginnis/react-router-firebase-auth

本质上,我的实现如下

firebase.js我将 firebase 配置代码移至单独的文件中,然后将 firebase.auth 导出为名为 firebaseAuth 的常量。

import firebase from 'firebase'

const config = {
  apiKey: "AIza....pPk",
  authDomain: "project.firebaseapp.com",
  databaseURL: "https://project.firebaseio.com",
}

firebase.initializeApp(config)

export const firebaseAuth = firebase.auth

Redux 操作/使用地点我正在使用 redux 来处理组件可能发生的各种操作。在我的操作文件中,我导入 firebaseAuth 变量,并使用它来调用各种 firebase auth 函数。正如您在这里所看到的,firebaseAuth() 作为函数被调用。

这成功地在我的 firebase 项目中创建了用户。 (我知道所有内容都标记为“登录”,但它使用的是创建帐户功能)。

import { firebaseAuth } from '../../config/firebase'
/**
 * Sign In User
 * Signs in our end user using firebase auth
 */

export const signIn = () => {
    return (dispatch, getState) => {
        console.log("Sign In - In Progress");
        // Get the state from the redux store
        const reduxState = getState();

        let email = reduxState.form.signIn.values.email;
        let password = reduxState.form.signIn.values.password;

        firebaseAuth().createUserWithEmailAndPassword(email, password).catch(function(error) {
            // Handle Errors here.
            console.log("Login Errors: " + error.code + error.message);
            // ...
        });
    }
}

顺便说一句,我使用 redux-form 进行用户内容输入,并使用 redux-thunk 中间件在操作中进行调度和 getState。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Firebase 无需身份验证即可初始化 - firebase.auth 不是函数 的相关文章

随机推荐

  • 通过 DFS 查找图中的强连通分量

    我正在阅读有关 BFS 和 DFS 的图算法 当我分析通过DFS在图中查找强连通分量的算法时 我想到了一个疑问 为了找到强连通分量 书 Coremen 做了什么 首先它在图上运行 DFS 以获得顶点的完成时间 然后再次以完成时间的降序在图的
  • 如何“安装”自定义 Windows 驱动程序?

    我计划用 C 语言编写一个基本的 Windows 注册表过滤器 该过滤器的目的是挂钩所有 用户和内核特权 注册表调用 以便我可以在我的程序中使用它们 我基本上是复制 Mark Rusinovich 的 regmon 进程监视器 但更基本 我
  • pdfBox 返回错误的编码字符

    我有一个pdfhttp www persianacademy ir UserFiles File fe1394 pdf http www persianacademy ir UserFiles File fe1394 pdf我想从中提取单词
  • Bash shell 中的“[ ]”与“[[ ]]”[重复]

    这个问题在这里已经有答案了 这可能已经得到回答 但我还是要问 我有两个版本的脚本 comp sh bin sh export tDay date Y m d newfile filename tDay filename filename 2
  • 直接加载页面到锚标记

    当我加载 URL 中带有哈希标记的页面时 页面会加载 然后跳转到锚标记 有没有什么方法可以防止这种 跳转 要么直接将页面加载到锚标记 要么至少使滚动平滑 我在 Chrome 和 Firefox 中看到这个问题 但在 IE 中没有 如果你仍然
  • Jersey 2 - ContainerRequestFilter get 方法注解

    我试图获取 ContainerRequestFilter 对象中的方法注释 控制器 GET RolesAllowed ADMIN public String message return Hello rest12 容器请求过滤器 Provi
  • 如何更改Android中开关的文本颜色

    我正在创建一个使用 Android 4 0 的应用程序 我想知道是否可以更改开关中文本的文本颜色 我尝试过设置文本颜色 但不起作用 有任何想法吗 提前致谢 你必须使用android switchTextAppearance属性 例如 and
  • 为什么即使优化级别为 3,向量分配也需要花费这么多时间?

    以前我在这里问过类似的问题 Android NDK vector resize 太慢 与分配有关 https stackoverflow com q 58745415 5709159 问题是这段代码 include
  • java中的内联初始化块

    我有课 public class MyMain public static void main String arg Temp t new Temp System out println instance initialize class
  • 加载 XSLT 文件时解析相对路径

    我需要使用 Apache FOP 进行 XSL 转换 我的代码如下 Setup FOP Fop fop fopFactory newFop MimeConstants MIME PDF out Setup Transformer Sourc
  • 在视图之间传递变量 SwiftUI

    再次基本问题 我想让变量 anytext 对于我要添加的所有未来视图都可见且可访问 在我的例子中 变量将是String 如果是的话 程序会改变吗 Float 我怎样才能将其另存为全局变量 如果我重新启动应用程序 变量会自行删除吗 如何保存即
  • 一起使用similar_text和strpos

    我想创建一个简单的搜索引擎 在用户输入中查找关键字 我知道我可以使用 strpos 来检查字符串中是否存在单词 但是 我希望用户能够拼写错误的单词 例如 userInput What year did George Washingtin b
  • 使用 IcyStreamMeta 从 SHOUTcast 获取元数据

    我正在为 Android 编写一个应用程序 从 SHOUTcast mp3 流中获取元数据 我正在使用我在网上找到的一个非常漂亮的类 我稍微修改了一下 但我仍然有两个问题 1 我必须使用 TimerTask 不断 ping 服务器来更新元数
  • Keras TimeDistributed Conv1D 错误

    这是我的代码 cnn input Input shape cnn max length emb output Embedding num chars 1 output dim 32 input length cnn max length t
  • 如何为启动的 setup.exe 创建日志文件

    我继承了一些InstallShield InstallScript项目 我目前正在使用InstallShield 2009 当我运行 setup exe 时 我似乎无法创建日志文件 我需要指定哪些命令行选项 InstallShield 有一
  • Makefile 头依赖项

    我是使用 make 的新手 并且一直在通过以下方式学习基础知识本教程 http www cs colby edu maxwell courses tutorials maketutor 这是本教程中的最后一个 makefile 示例 IDI
  • 使用 6.0 API (Android) 从服务器发送和接收数据

    我真的很困惑 我正在尝试开发一个简单的功能 允许我从服务器发送和接收数据 操作如下 在一个活动中 我对服务器上的 PHP 文件执行 HTTP POST PHP 文件 获取我发送的数据 通常是字符串 并使用通过 http 发送的参数执行查询
  • Eclipse 构建 Android 应用程序:如何在编译时创建两个版本?

    我正在编写一个 Android 应用程序 并希望基于相同的代码创建两个版本 免费版本和高级版本 我有两个版本的一个代码库 具有各种运行时检查来启用或禁用某些功能 例如 public class MyAppContext extends Ap
  • 使用 Retrofit 的 Google 地图方向 API

    我想绘制两个位置之间的路线 我使用retrofit库来调用API 我没有得到任何回应 我需要 ArrayList 中的折线 我怎么做到这一点 还需要帮助来创建 GsonAdapter 谢谢 在活动中 String base url http
  • Firebase 无需身份验证即可初始化 - firebase.auth 不是函数

    我无法弄清楚为什么我的一个 Firebase 应用程序使用 auth 进行初始化 而另一个则没有 我在这里遵循了节点安装选项 https firebase google com docs web setup https firebase g