Non riesco a impostare le corrette regole di sicurezza per la mia applicazione.La regola di sicurezza di Firebase dà il permesso negato?
Una panoramica dell'applicazione che sto scrivendo è che gli utenti possono registrarsi usando e-mail e password (sto usando Firebase Simple Login per questo che funziona perfettamente). Una volta effettuato l'accesso, l'utente può aggiungere i propri todos.
E per aggiungere un nuovo todo a qualsiasi utente, ho semplicemente aggiornato il modello di todos.
$scope.todos.push({
user: '[email protected]',
todo: 'What to do?'
});
Questa regole di sicurezza che sto usando per limitare l'utente non registrato per aggiungere qualsiasi todo:
{
"rules": {
".read": true,
"todos": {
".write": "auth != null",
".validate": "auth.email == newData.child('user').val()"
}
}
}
Ma non permette nemmeno un utente autenticato di scrivere qualsiasi dato e gettando un errore, "WARNING FIREBASE: on() o once() per/todos non riuscito: errore: permesso_dato".
Ma se aggiungo i seguenti dati nel simulatore, allora funziona come previsto.
{user: "[email protected]", todo: 'What to do?'}
Ecco il 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.
Puoi provare a utilizzare il simulatore di sicurezza in Forge per capire perché questo non funziona. Due commenti: 1) Sembra che tu stia scrivendo un array con un oggetto, probabilmente dovrebbe essere solo un oggetto. 2) La variabile "$ todos" dovrebbe probabilmente essere solo "todos". – Anant
@Anant: Thx per la risposta. Come hai detto, ho rimosso $ e modificato la regola di convalida con "" .validate ":" auth.email == '[email protected]' "' dove 'a @ b.com' è un utente registrato - questo funziona ma not '" .validate ":" '[email protected]' == newData.child ('utente'). val() "'. È possibile vedere che cosa ha newData? – codef0rmer
@Anant: ho aggiornato la domanda per darti più chiarezza. Come hai detto, $ non è necessario allora perché è usato ovunque nella documentazione? – codef0rmer