1

Firebaseの私のデータは、私のWebページのコンテキストでのみ読み込み可能で、Firebase URLを開くなどしては読めません。匿名でサインインしたユーザーのFirebaseルール

まだ登録されていないユーザーの場合は、signInAnonymously()を使用してuser.uidを提供しますが、まだ認証されていないようです。したがって、ユーザオブジェクトを持っていても、ルール".read": "auth != null"はこれらのユーザに対してPERMISSION_DENIEDになります。私がtrueに読み取りアクセス権を変更するとき

"offices": { 
     "$office_id": { 
     ".read": "auth != null", 
     ".write": "auth != null" 
     } 
    }, 

それは動作します:

$(document).ready(function() { 

    var config = { 
     apiKey: "<my api key>", 
     authDomain: "<my firebase>.firebaseapp.com", 
     databaseURL: "https://<my firebase>.firebaseio.com", 
     storageBucket: "<my firebase>.appspot.com" 
    }; 
    firebase.initializeApp(config); 
    firebase.auth().onAuthStateChanged(function (user) { 
     if (user) {} else { 
      firebase.auth().signInAnonymously(); 
     } 
    }); 

    var ref = new Firebase("https://<my firebase>.firebaseio.com/offices/some_office"); 
    ref.on("value", function (snapshot) { 

     var name = snapshot.child("title").val(); 
     console.log(snapshot.val()); 


    }, function (errorObject) { 
     console.log("The read failed: " + errorObject.code); 
    }); 

}); 

と対応するルール:

は、ここに私のJavaScriptのです。

サインインした匿名ユーザー(およびログインしているユーザー)のみが自分のデータを読み取ることを許可するためにどのようなルールを使用できますか?

+0

匿名で認証されたユーザーは*認証されたユーザーです。それがうまくいかない場合は、問題を再現する最小限の完全コード(ルール+コード)を提供してください(http://stackoverflow.com/help/mcve)。 –

+0

これはうれしいことです、フランクに感謝します。コードを表示するように編集しました。 – Ken

答えて

1

ユーザーがサインインする前にコードがリスナーに接続しています.Firebaseデータベースサーバーは、リスナーが最初に接続されたときにすぐにアクセス許可をチェックし、不正なリスンをすぐに拒否します。ちなみに

$(document).ready(function() { 
    var config = { 
     apiKey: "<my api key>", 
     authDomain: "<my firebase>.firebaseapp.com", 
     databaseURL: "https://<my firebase>.firebaseio.com", 
     storageBucket: "<my firebase>.appspot.com" 
    }; 
    firebase.initializeApp(config); 
    firebase.auth().onAuthStateChanged(function (user) { 
     if (user) { 
      var ref = new Firebase("https://<my firebase>.firebaseio.com/offices/some_office"); 
      ref.on("value", function (snapshot) { 
       var name = snapshot.child("title").val(); 
       console.log(snapshot.val()); 
      }, function (errorObject) { 
       console.log("The read failed: " + errorObject.code); 
      }); 
     } else { 
      firebase.auth().signInAnonymously(); 
     } 
    }); 
}); 

ソリューションは、ユーザーがリスナーを装着する前に認証されるまで待つことです、私は非常にあなたにも、バージョン3.xのにFirebaseデータベースのコードを更新することをお勧めします

+0

私のバージョンの不本意な組み合わせのために上記のように動作しませんでした。 'new firebase'呼び出しを' firebase.database()。ref() 'に変更する必要がありました。おかげでフランク! – Ken

関連する問題