Firebaseデータベースのデータエントリにセキュリティを追加するために、Firebaseルールをテストしています。私はそれを確実にしたいと思います:FirebaseはランダムなsetValue()子データに対して拒否されたアクセス権を返します
のみFirebase認証「ユーザー」/「アカウント」
に自分のアカウント情報を読み書きすることができる唯一のFirebase認証「ユーザー」読むことができます/独自の文字を書きますデータを「メッセージ」に変換する。私は、次のルール書かれている。この目的のため
:上記のルールが正しいと見
{
"rules": {
"account": {
"$uid": {
".read": "auth.uid === $uid",
".write": "auth.uid === $uid"
}
},
"messages": {
"$message_id": {
".read": "auth !== null",
".write": "auth.uid === newData.child('_uid').val() &&
root.child('account').hasChild(auth.uid) === true"
},
}
}
}
が、しかし、私は取得にを "失敗しました::DatabaseError許可が拒否された"(3私がログインしているユーザアカウントのためにプッシュしている "メッセージ"子ノードの名前です。ここで
はfirebase方法に私のプッシュのコードスニペットです:
を私は:
public void saveToFirebase(){
String echo = "";
String _uid = FirebaseAuth.getInstance().getCurrentUser().getUid();
DatabaseReference mCurrentRecord = mFirebaseGame.push();
Log.d(LOG, "User is " + _uid + "\nNew record ID: " + mCurrentRecord.getKey());
gameCharacter.map.put("_uid", _uid);
try{
for(String keys : gameCharacter.map.keySet()){
echo += keys + ":" + gameCharacter.map.get(keys) + "\n";
mCurrentRecord.child(keys).setValue(gameCharacter.map.get(keys));
}
}
catch(Exception e){
error = e.toString();
}
}
そして、ここでは、私が取得しています許可拒否エラーですなぜ私はパーミッションが子ノード "txtStr、txtCharName、txtEner"に対してのみ拒否されたかを知ることができますが、残りは正常に実行されていますデータベースにプッシュされます。
Firebase Rulesの構造などで何か不足していると指摘できたら幸いです。ありがとうございました。
あなたの現在のコードが失敗している理由がわかりません。しかし、地図をループするのではなく、単に 'mCurrentRecord.setValue(gameCharacter.map)'を呼び出すのはなぜですか? –
あなたは正しい@Frank van Puffelenです。すべてのgameCharacter.mapをsetValue()に入れると、エラーは修正されました。 – raiser00
raiser00をよく聞いてください! –