У меня есть приложение для чата, работающее на Angular и Firebase, но у меня проблемы с правилами безопасности.
Я создал следующее правило в качестве теста, и оно работает в симуляторе, но не будет работать с объектом, который я передаю Firebase из Angular.
{
"rules": {
"chat": {
".read": true,
".write":"newData.child('text').val() === 'test'"
}
}
}
Мой угловой код выглядит следующим образом. $ rootScope.userDing - это просто объект, который содержит информацию о пользователе после auth.
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
Где я ошибаюсь или у кого-нибудь есть советы по отладке?
{
"rules": {
"chat": {
".read": true,
"$chatMsg": {
".write": true,
".validate": "newData.child('text').val() === 'test'"
}
}
}
}
Мне пришлось добавить еще один уровень правил для отдельных сообщений чата, очень простой на самом деле.
См. Https://www.firebase.com/docs/security/quickstart.html (Часть 3: Сделайте свои правила динамическими)