Firebase数据库重复初始化报错,规则修改后登录崩溃无法正常使用
问题修复步骤
1. 修复代码语法错误
你当前代码中update方法内残留了无效标记`enter code here`,属于语法问题,会直接触发运行时崩溃,先删除该无效内容,同时补充错误捕获避免无提示崩溃,修正后的代码段如下:
} else { firebase.database() .ref('/users/' + result.user.uid) .update({ last_logged_in: Date.now() }) .catch(err => console.log('更新登录时间失败', err)) }
2. 修正安全规则配置
你当前将users节点的.write权限设为false,会导致新用户写入信息、老用户更新登录时间的请求全部被拒绝,这是接口中断的核心原因之一。建议调整为用户仅可读写自身数据的安全规则,兼顾权限安全和业务需求:
{ "rules": { "users": { "$uid": { ".read": "$uid === auth.uid", ".write": "$uid === auth.uid" } } } }
3. 解决Firebase重复初始化问题
报错Firebase DB initialized multiple times是因为你没有对Firebase初始化逻辑做判重处理,每次调用相关逻辑时重复执行了初始化代码。修改初始化逻辑如下即可:
// 初始化前先判断是否已有实例 if (!firebase.apps.length) { firebase.initializeApp(你的Firebase配置对象); } // 后续直接使用firebase默认实例即可
同时确认你的配置项中databaseURL参数和Firebase控制台给出的地址完全一致,不要出现拼写、域名、路径不匹配的问题。
4. 完善异常捕获逻辑
你当前的数据库set、update操作均未补充错误捕获逻辑,一旦请求失败会触发未捕获的Promise异常,直接导致应用崩溃。给所有异步操作补充catch块捕获错误即可,例如:
firebase.database() .ref('/users/' + result.user.uid) .set({/* 用户数据 */}) .then(response => console.log("user info set!")) .catch(err => console.log('写入用户信息失败', err))
5. 确认数据库可用状态
你提到数据库还有1天到期,可先登录Firebase控制台确认实时数据库的运行状态,如果是免费版配额到期可临时升级付费方案,或备份数据后重建免费实例,避免数据库被关停导致访问失败。
内容的提问来源于stack exchange,提问作者Jhansi Rani
相关产品推荐
相关产品推荐

