私は自分のアプリケーションに適切なセキュリティルールを設定しようとしています。Firebaseセキュリティルールは許可を拒否しましたか?
私が書いているアプリケーションの概要は、ユーザーが電子メールとパスワードを使用して自分自身を登録できることです(Firebase Simple Loginを使用しています)。ログインすると、ユーザーは自分のtodosを追加できます。
angularFire('https://<firebase>/firebaseio.com/todos', $scope, 'todos');
任意のユーザーに対して新しいTodoを追加するには、単にtodosモデルを更新します。
$scope.todos.push({
user: '[email protected]',
todo: 'What to do?'
});
私は任意のTODOを追加するために未登録ユーザーを制限するために使用しています。このセキュリティルール:
{
"rules": {
".read": true,
"todos": {
".write": "auth != null",
".validate": "auth.email == newData.child('user').val()"
}
}
}
しかし、それは、任意のデータを書き込むようにしても認証されたユーザーを許可し、エラーを投げていません、 "FIREBASE WARNING:/ todosのon()またはonce()に失敗しました:エラー:permission_denied。"
しかし、次のデータをシミュレータに追加すると、期待通りに機能します。ここで
{user: "[email protected]", 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.
Forgeでセキュリティシミュレータを使用して、これが動作しない理由を確認できます。 2つのコメント:1)あなたは1つのオブジェクトを持つ配列を書いているようですが、おそらく1つのオブジェクトにすぎません。 2) "$ todos"変数はたぶん "todos"でなければなりません。 – Anant
@Anant:返信用のThx。あなたが言ったように、私は$を削除し、バリデーションルールを '' .validate ''で変更しました: "auth.email == '[email protected]'" '' a @ b.com'は登録ユーザーです。 ''validate '': '' [email protected] '== newData.child(' user ')。val()" '。 newDataの内容を確認することはできますか? – codef0rmer
@Anant:質問をもっと明確にするために質問を更新しました。あなたが言ったように、なぜドキュメントがどこに使われているのかは分かりません。 – codef0rmer