【问题标题】:Firebase security rule works in Simulator but not in Angular codeFirebase 安全规则适用于模拟器,但不适用于 Angular 代码
【发布时间】:2015-09-29 18:11:52
【问题描述】:

我有一个在 Angular 和 Firebase 上运行的准系统聊天应用程序,但在使用安全规则时遇到了问题。

我创建了以下规则作为测试,它在模拟器中有效,但不适用于我从 Angular 传递 Firebase 的对象。

{
"rules": {

  "chat": {
    ".read": true,
    ".write":"newData.child('text').val() === 'test'"
  }
 }
}

我的角度代码如下所示。 $rootScope.userDing 只是一个在授权时保存用户信息的对象。

var app = angular.module("fpl-chat", ["firebase"]);

app.controller("SampleCtrl", function($rootScope, $scope, $firebaseArray) {
  var ref = new Firebase("https://glaring-torch-9680.firebaseIO.com/chat");

  $scope.messages = $firebaseArray(ref);

  $scope.addMessage = function() {
    if ($rootScope.userDing) {
        $scope.toAdd = {
            text: $scope.newMessageText,
            timestamp: Date.now(),
            user: $rootScope.userDing.name,
            imgSrc: $rootScope.userDing.imgSrc,
            uid: $rootScope.userDing.uid
        }
    } else {
        $scope.user = 'Guest';
        $scope.imgSrc = 'assets/img/guest.png';
        $scope.uid = 'guestUID';
    }
    $scope.messages.$add($scope.toAdd);
    $scope.newMessageText = '';
  };

});

如果$scope.newMessageText'test',那么它仍然不允许写操作。

我得到的错误是:

FIREBASE WARNING: set at /chat/-K-YU0reCudVPu_8t74s failed: permission_denied

我哪里出错了或者有人有任何调试提示吗?

【问题讨论】:

  • 我尝试了其他一些规则和方法,但似乎都不起作用。
  • 安全规则和认证是完全不同的话题。你能发布你的整个规则集吗?
  • 检查更改的代码:)
  • 控制器/服务代码的其余部分怎么样?具体来说,无论在哪里设置 $scope.messages
  • 没有办法用这么少的代码重现你的问题。您还可以做很多事情来缩小这里的范围:首先用包含值的字符串替换这些变量,排除可能性,直到您验证了问题消失的点。见creating an mcve

标签: angularjs firebase firebase-security


【解决方案1】:
{
"rules": {

  "chat": {   
    ".read": true,

    "$chatMsg": {
    ".write": true,
    ".validate": "newData.child('text').val() === 'test'"
   }
  }
 }
}

我不得不为个人聊天消息添加另一层规则,真的很简单。

请参阅:https://www.firebase.com/docs/security/quickstart.html(第 3 部分:使您的规则动态化)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多