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

Ionic中AngularFireDatabase提示未授权但Firebase规则已开放

解决AngularFire2权限异常与版本兼容问题

看起来你遇到的权限问题其实是Angular与AngularFire2版本不兼容导致的“假权限错误”,结合你的描述,我整理了以下针对性的解决步骤:

1. 先处理核心的版本不匹配问题

你当前使用的angularfire2@5.0.0-rc.8.0明确要求依赖@angular/common@^6.0.0和@angular/core@^6.0.0,但你的项目还停留在Angular 5.2.10版本。这种跨大版本的依赖不匹配会引发各种难以排查的异常,包括看似和规则相关的权限验证失败。

两种解决路径:

路径一:降级AngularFire2到兼容Angular 5的版本

Angular 5对应的稳定AngularFire2版本是5.0.0-rc.6,同时Firebase也要降级到兼容的版本,执行以下命令:

npm uninstall angularfire2 firebase
npm install angularfire2@5.0.0-rc.6 firebase@4.12.0 --save

路径二:升级Angular到6.x版本

如果想保留当前AngularFire2版本,需要把整个Angular项目升级到6.x:

  1. 先安装对应版本的Angular CLI:
npm install -g @angular/cli@6.2.9
  1. 运行Angular升级命令:
ng update @angular/core@6 @angular/cli@6
  1. 升级完成后重新安装依赖确保完整性:
npm install angularfire2 firebase --save

2. 确认Firebase规则确实生效

虽然你说设置了完全开放的规则,但还是要再仔细核对,并且确保规则已经发布生效(不是停留在草稿状态):

  • 实时数据库规则:
{
  "rules": {
    ".read": true,
    ".write": true
  }
}
  • Firestore规则(如果用的是Firestore):
rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {
    match /{document=**} {
      allow read, write: if true;
    }
  }
}

3. 检查你的Provider代码是否正确适配了新版本

因为FirebaseListObservable已弃用,AngularFire2 5.x中应该使用AngularFireList,确保你的Provider代码类似这样:

import { Injectable } from '@angular/core';
import { AngularFireDatabase, AngularFireList } from 'angularfire2/database';

@Injectable()
export class DataProvider {
  private itemsRef: AngularFireList<any>;

  constructor(private db: AngularFireDatabase) {
    // 替换成你的数据库集合路径
    this.itemsRef = db.list('items');
  }

  getItems(): AngularFireList<any> {
    return this.itemsRef;
  }
}

完成以上步骤后,重启你的Angular项目,应该就能正常获取Firebase数据了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 03:52:53