首页 > 解决方案 > Firebase 安全规则在 v3 中的作用不同

问题描述

我正在尝试为 12 月不推荐使用 v2 firebase 时准备一些旧应用程序。18. Firebase 电子邮件说只有身份验证将被弃用,但由于安全规则,我的 AngularFire 功能似乎也无法正常工作。例如 -

$firebaseArray(ref.child('data').child('stuff')); <- used to work no problem

但是现在(v3)它说它无权访问该数据。

这些是火力基地规则 -

$company:{
".read": "root.child('users').child(auth.uid).child('company').val() == $company || root.child('users').child(auth.uid).child('company').val() == 'COMPANY'",

但是,如果我只是将读取和写入都设置为 TRUE,它会再次起作用。

$company: {
".read": "true",
".write": "true"
}

$firebaseArray 有效,但它以以前没有的方式被安全规则绊倒了。关于如何调整规则以使其全部按预期方式运行的任何想法?

现在,如果我使用 v3 快照方法访问数据,它就可以工作了!但现在它没有与数据同步,它只是那个特定时刻的快照。我使用 $firebaseArray 和 $firebaseObject 的原因是它会与数据库上的任何更改同步。

firebase.database().ref('/stuff').once('value').then(function(snapshot) {
  console.log('it worked!');
});

谢谢!

******************新编辑********************* 2018 年 12 月 14 日

firebase.initializeApp({
  apiKey: APIKEY,
  databaseURL: FIREBASE_URL, // Realtime Database
});

var stuffRef = firebase.database().ref().child('stuff');
var dataMaster = $firebaseObject(stuffRef);

我收到此错误 - ref.ref 不是函数

我究竟做错了什么??谢谢!

标签: javascriptfirebasefirebase-realtime-databaseangularfirefirebase-security

解决方案


当你使用firebase.database().ref('/stuff').once('value')时,回调只会被调用一次(因此得名)。如果您想使用当前值对该值的任何更新来调用,请使用on()

firebase.database().ref('/stuff').on('value', function(snapshot) {
  console.log('it worked!');
});

请注意,您使用的 AngularFire 版本非常旧,因此它可能无法与 Firebase SDK 一起使用。在这种情况下,请考虑更新您的 AngularFirebase 版本。


推荐阅读