You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Electron中Firebase匿名登录失效且出现heartbeats undefined报错

问题详情

原本通过CDN(www.gstatic.com)引入Firebase,迁移到Electron本地SDK后,启动应用时控制台刷出7条重复报错:

(7) C:\Users\budiy\OneDrive\Documents\GitHub\Cornilieus\node_modules@firebase\app\dist\index.cjs.js:1056 heartbeats undefined

同时控制台一直输出Signing in,这段日志来自认证状态监听代码,说明signInAnonymously调用后未成功登录,auth状态始终处于未登录状态:

onAuthStateChanged((user) => {
    if (user) {
        // do something
    } else {
        console.log("Signing in")
        signInAnonymously(auth).then((user) => {
            console.log(user);
        }).catch((error) => {
            console.error(error);
        });
    }
});

除上述内容外,控制台仅显示Electron安全警告和开发者工具按键检测信息,无其他相关输出。

已尝试的操作
  • 将Firebase版本从10.13降级至10.12.5
  • 删除并重装node_modules

以上操作均未解决signInAnonymously失效和heartbeats undefined报错问题。

可行解决思路

1. 调整Electron安全配置适配Firebase

Electron的contextIsolation、nodeIntegration等安全设置可能干扰Firebase SDK运行,可先临时调整配置测试:

const mainWindow = new BrowserWindow({
  webPreferences: {
    contextIsolation: false, // 临时关闭隔离测效果,正式环境建议用预加载脚本替代
    nodeIntegration: true,
    allowRunningInsecureContent: false,
  }
});

2. 初始化Firebase时禁用心跳检测

heartbeats undefined报错大概率是Firebase心跳检测在Electron环境中异常,初始化时可临时禁用该功能:

import { initializeApp } from "firebase/app";
import { getAuth, signInAnonymously, onAuthStateChanged } from "firebase/auth";

const firebaseConfig = {
  // 你的Firebase项目配置
};

const app = initializeApp(firebaseConfig);
const auth = getAuth(app);

// 禁用认证模块的心跳检测,规避报错
auth.settings.appVerificationDisabledForTesting = true;

3. 确认Firebase控制台已开启匿名登录权限

检查Firebase控制台,确保项目已启用匿名登录功能:

  • 进入Firebase控制台 → 认证 → 登录方法 → 找到「匿名登录」→ 点击启用

4. 用预加载脚本隔离Firebase调用(正式环境推荐)

兼顾安全与功能,通过Electron预加载脚本将Firebase方法暴露给渲染进程:

  • 编写preload.js:
    const { contextBridge } = require('electron');
    const { initializeApp } = require('firebase/app');
    const { getAuth, signInAnonymously, onAuthStateChanged } = require('firebase/auth');
    
    const firebaseConfig = { /* 你的项目配置 */ };
    const app = initializeApp(firebaseConfig);
    const auth = getAuth(app);
    
    contextBridge.exposeInMainWorld('firebaseAuth', {
      signInAnonymously: () => signInAnonymously(auth),
      onAuthStateChanged: (callback) => onAuthStateChanged(auth, callback)
    });
    
  • 在main.js中配置预加载脚本:
    const path = require('path');
    const mainWindow = new BrowserWindow({
      webPreferences: {
        contextIsolation: true,
        preload: path.join(__dirname, 'preload.js'),
      }
    });
    
  • 渲染进程中调用方式:
    window.firebaseAuth.onAuthStateChanged((user) => {
      if (!user) {
        console.log("Signing in");
        window.firebaseAuth.signInAnonymously()
          .then(user => console.log(user))
          .catch(err => console.error(err));
      }
    });
    

5. 统一Firebase依赖版本

尝试升级到最新稳定版(如10.14.x),或锁定与Electron兼容的版本,确保所有Firebase子包版本一致,避免版本冲突:

{
  "dependencies": {
    "@firebase/app": "10.14.0",
    "@firebase/auth": "10.14.0"
  }
}

内容的提问来源于stack exchange,提问作者Falling10fruit

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 04:43:15