2017-02-07 18 views
0

私はドキュメント(https://firebase.google.com/docs/database/security/quickstart#sample-rules)からこれらのセキュリティルールをしようとしています:Firebaseセキュリティルールプライベート・ユーザデータ

{ 
    "rules": { 
    "users": { 
     "$uid": { 
     ".read": "$uid === auth.uid", 
     ".write": "$uid === auth.uid" 
     } 
    } 
    } 
} 

ノー・ワン他のユーザーは、ユーザーの下に自分のノードへの読み書きができるようにしたいと彼らの情報にアクセスすることができます。

私のデータ構造は次のとおりです。 ユーザの下では、私のユーザの情報はFacebook UIDの下に保存されます。 「ユーザー/」+ facebookUID

しかし、私は、コードは何もリターンを実行すると:私はノードを照会すると、それが動作するシミュレータで

var userinformation = firebase.database().ref("users/" + <facebookUID>).on("value",function(snapshot) { 

//...do stuff here 

}); 

:私はしてデータベースを照会し、私のコードで

myfirebase 
users 
-<facebookUID> 
->user info stored here 
-<facebookUID> 
->user info stored here 
-<facebookUID> 
->user info stored here 

私はセキュリティルールとは何かを推測していますが、フィルタや何かをすることはできません....アクセスするルールがないため、ノードへのアクセスはfalseを返し、アクセスは許可されません。しかし、カスケードのためにユーザーにアクセスできるようにすると、誰でも他のユーザーのデータにアクセスできます。

どうすればこの問題を解決できますか?

私は他の質問を見てみましたが、うまくできません。

UPDATE - いくつかの写真は

firebase structure

security rules

+0

あなたが照会している場所がうまくいるようです。あなたはデータをフィルタリングしようとしているわけではないので、あなたが言及している "ルールはフィルタではありません"ということになります。しかし、「」はどこから来たのですか?リスナーをアタッチしたときに初期化されていますか? –

+0

ご協力ありがとうございます。リスナーは.onコールを意味しますか?これはうまくいくはずです。なぜなら、.readと.writeがルートでtrueに設定されていると、コードは正常に動作し、アクセス権があるからです。 悪い投稿を追加する –

+0

@FrankvanPuffelenこのhttps://github.com/rhroyston/firebase-authをフォークして、.jsファイルの下部に「管理者承認」メソッドを追加すると本当に私を助けてくれるだろう、と私は他人を考えますか?)あなたは男です。 ...これは私があなたに連絡するために知っている唯一の方法です。あなたが気にしないことを願っています。 approveUser(uid、 'gold')/ approveUser(uid、 'bronze')のようなものです。複数レベルの管理者ですか? –

答えて

0

私はあなたがどのようにFirebase作品を誤解することができると思います。 on()に電話するとデータは返されません。その代わりに、データの受信を開始し、そのデータが利用可能になったときにあなたに電話してから、それが変更されます。だから、コールバック内のデータを処理する必要があります。

firebase.database().ref("users/" + <facebookUID>).on("value",function(snapshot) { 
    console.log(snapshot.val()); 
}); 

これは、あなたがいつもでコードを書くことができないことを意味ファッション「最初のユーザー情報を取得し、ユーザー情報とXYZを行います」。その代わりに、コードを「ユーザー情報の同期を開始してから、ユーザー情報が利用可能なときにxyzで開始する」ようにする必要があります。

上記のスニペットでは「xyz」が情報を記録していますが、UIを簡単に更新することもできます。重要なのは、 "xyz"を実行するコードは、ユーザー情報が利用可能な(そして最新の)唯一の場所であるため、コールバック内になければならないということです。

0

あなたはルールをもっと遠くに、つまりネストしないようにする必要があると思います。あなたはr/wを許可するルールを定義する必要がありますか、失敗するでしょう。私はあなたの質問を理解することを願って...?

+0

病気これを試してみてください –

0

また、ユーザが自分のユーザ情報ブランチの下でアクセスする分岐パスのリストを保存することで、JavaScript側での制限を行うこともできます。これは、彼が他のすべてからユーザをカプセル化し、彼は彼が使用または編集する権限を持っていないだろう。私はそれがjavascriptで行われる方法を知らないが、私はアンドロイドでそれをやった。お役に立てれば。

関連する問題