アプリケーションに適切なセキュリティ ルールを設定するのに苦労しています。
私が書いているアプリケーションの概要は、ユーザーが電子メールとパスワードを使用して自分自身を登録できることです (私はこれに完全に機能する Firebase Simple Login を使用しています)。ログインすると、ユーザーは Todo を追加できます。
angularFire('https://<firebase>/firebaseio.com/todos', $scope, 'todos');
また、任意のユーザーに対して新しい todo を追加するには、todos モデルを更新するだけです。
$scope.todos.push({
user: 'a@b.com',
todo: 'What to do?'
});
未登録ユーザーが todo を追加することを制限するために使用しているこのセキュリティ ルール:
{
"rules": {
".read": true,
"todos": {
".write": "auth != null",
".validate": "auth.email == newData.child('user').val()"
}
}
}
ただし、認証されたユーザーでもデータを書き込むことはできず、「FIREBASE WARNING: on() or once() for /todos failed: Error: permission_denied.」というエラーがスローされます。
しかし、シミュレーターに次のデータを追加すると、期待どおりに機能します。
{user: "a@b.com", todo: 'What to do?'}
ログは次のとおりです。
/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.