0

私はFirebaseルールの問題を何時間もデバッグしようとしていて、利用可能なものがあるかどうか疑問に思っていました。

私の問題は、firebaseObject$save(または$addで作成)で保存し、私のルールのために許可が拒否されるということです。しかし、ルールとオブジェクトの両方がかなり複雑で、関係する数十のルールがあります。私のシミュレータでは、私はすべてそれを持っていると思うが、依然として許可が拒否されます。

問題は、Firebaseに送信しようとしているJSONデータが実際にどのように表示されるのかを100%確信していないことです。通常のconsole.log(myObject)を使用すると、もちろんこのオブジェクト内のすべての値と関数のリストが表示されますが、期待していたraw JSONと同じではありません({ "name": "value" }など)。

普通のJSONデータ$saveを表示して、これをルールシミュレータにコピーしてデバッグする方法はありますか?または、どのような正確な許可が拒否されているかを確認する他の方法はありますか?

それ以外の場合は、私のアクセス許可をオフに切り替えると、私はかなり長い夜になります。 :(

答えて

0

$firebaseObjectの値は、オブジェクト、(プロトタイプ配線方法に加えて)唯一の違い$ -prefixed特性($id$resolvedなど)の数であるべきである場合。だからできるはず

var written = {}; 
Object.keys(myObject).forEach(function (key) { 
    if (key.charAt(0) !== "$") { written[key] = myObject[key]; } 
}); 
console.log(JSON.stringify(written)); 

あなたのコメントで述べた$$hashKeyエントリはAngularJSによって追加され、より一般的なメカニズムは無視する/すべての$を削除するために使用することができます。このようなものを使用してデータベースに書き込まれます何の実際のJSONを表示するにはオブジェクト全体にキーを追加:

console.log(JSON.stringify(myObject, function (key, val) { 
    return key.charAt(0) === "$" ? undefined : val; 
})); 
+0

もう一度感謝します。あなたはもう数日前に別の科目で私を助けてくれました。あなたのコードでは、ずっと簡単になっています。コンソール出力は次のようになります: '' " - " KU8JfAZRCsPJy9uOMqm "、" choices ":{{" id ":" choice1 "、" option ":" option 1 "、" option_price ": - 2、 "$$ hashKey": "object:189"}、{"id": "choice2"、 "option": "option 2"、 "option_price":2、 "$$ hashKey": "object:190" "id": "choice3"、 "option": "option 3"、 "option_price":5、 "$$ hashKey": "object:191"}]} 'それを調整してすべての$$ hashkeys同様に除外されますか?結果はシミュレータに最適です。 – Oliver

+0

私は答えを更新しました。 – cartant

+0

あなたは天才です!これは完璧に動作します。再度ありがとう、これは私の図書館の永続的な機能になります。このように、大きな$ saveと$ addプロセスをデバッグするのはずっと簡単です。 – Oliver

関連する問題