Staram się ustawić odpowiednie reguły bezpieczeństwa dla mojej aplikacji.Reguła bezpieczeństwa Firebase daje odmowę uprawnień?
Przegląd aplikacji, którą piszę, to to, że użytkownicy mogą się zarejestrować za pomocą adresu e-mail i hasła (używam do tego prostego logowania do Firebase). Po zalogowaniu użytkownik może dodać swoje todos.
angularFire('https://<firebase>/firebaseio.com/todos', $scope, 'todos');
Aby dodać nowe todo do dowolnego użytkownika, po prostu aktualizuję model todos.
$scope.todos.push({
user: '[email protected]',
todo: 'What to do?'
});
Te zasady bezpieczeństwa Używam ograniczyć niezarejestrowanego użytkownika, aby dodać dowolny todo:
{
"rules": {
".read": true,
"todos": {
".write": "auth != null",
".validate": "auth.email == newData.child('user').val()"
}
}
}
Ale to nie pozwala nawet uwierzytelniony użytkownik pisać żadnych danych i rzuca błąd, "OSTRZEŻENIE PRZECIWPOŻAROWE: on() lub once() for/todos failed: Błąd: permission_denied."
Ale jeśli dodaję następujące dane w symulatorze, działa zgodnie z oczekiwaniami.
{user: "[email protected]", todo: 'What to do?'}
Oto log:
/todos:.write: "auth != null"
=> true
/todos:.validate: "auth.email == newData.child('user').val()"
=> true
/todos:.validate: "auth.email == newData.child('user').val()"
=> true
Write was allowed.
Możesz spróbować użyć symulatora bezpieczeństwa w Forge, aby zobaczyć, dlaczego to nie działa. Dwa komentarze: 1) Wydaje się, że piszesz tablicę z jednym obiektem, prawdopodobnie powinien to być tylko jeden obiekt. 2) Zmienna "$ todos" powinna być po prostu "todos". – Anant
@Anant: Thx za odpowiedź. Jak już powiedziałeś, usunąłem $ i zmieniłem regułę sprawdzania poprawności za pomocą '.validate": "auth.email == '[email protected]'" 'gdzie' a @ b.com' jest zarejestrowanym użytkownikiem - działa to jednak nie "" .validate ":" '[email protected]' == newData.child ('user'). val() "'. Czy można zobaczyć, co ma nowy plik danych? – codef0rmer
@Anant: Zaktualizowałem pytanie, aby zapewnić Ci większą jasność. Jak powiedziałeś, $ nie jest potrzebne, dlaczego jest używane wszędzie w dokumentacji? – codef0rmer