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:
- 先安装对应版本的Angular CLI:
npm install -g @angular/cli@6.2.9
- 运行Angular升级命令:
ng update @angular/core@6 @angular/cli@6
- 升级完成后重新安装依赖确保完整性:
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
相关产品推荐
相关产品推荐

