web-dev-qa-db-ja.com

読み取り/書き込み権限がtrueに設定されているため、Firebaseデータベースの権限が拒否されました

シンプルなAndroidアプリ。Firebaseデータベースへの書き込みに問題があります。データベースルールをパブリックに設定しました。

{
  "rules": {
    ".read": true,
    ".write": true
  }
}

単純なクラスMessageを作成しました:

import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;

public class Message {
    FirebaseDatabase database = FirebaseDatabase.getInstance();
    DatabaseReference dbRef = database.getReference();
    public String sender;
    public String message;

    public Message(){}

    public Message(String sender, String message) {
        this.sender = sender;
        this.message = message;
    }
}

そして、onClickメソッドwriteNewMessageを実行するボタンを設定します。これらは重要なコード行です。

int counter = 0;

public void writeNewMessage(View view) {

        counter += 1;
        Message messageToWrite = new Message("John", "Simple message: " + counter);
        String messageId = String.valueOf(counter);

        dbRef.child("users").child(messageId).setValue(messageToWrite);
    }

実行すると、次のエラーが表示されます。

W/RepoOperation: setValue at /users/1 failed: DatabaseError: Permission denied

この質問は単純で、繰り返される可能性が高いことはわかっていますが、認証やその他のコンポーネントにエラーを関与させることなく、この問題を尋ねる質問をまだ見つけていません。問題の単純さは、私を最も混乱させるものです。

編集:私もこのエラーを見つけました:

Failed to load module descriptor class: Didn't find class "com.google.Android.gms.dynamite.descriptors.com.google.firebase.auth.ModuleDescriptor"
21
Ben

これはgoogle-services.jsonの問題のように見えます。

アプリ名とクライアントIDがfirebaseコンソールと同じであることを確認してください。

不明な場合は、プロジェクトのコンソールからgoogle-services.jsonを再ダウンロードして、プロジェクトに追加してください。

21
devprashant

完全なソリューション1)。最初に[認証]タブに移動し、[SIGN-IN-METHOD Anonymous On 2)を選択します。次に、[データベース]タブに移動し、ルール{ "rules": { ".read": true, ".write": true }} 3)。 3番目に[ストレージ]タブに移動し、次のルールを記述します

service firebase.storage {
 match /b/myapplicationname-f2266.appspot.com/o {
 match /{allPaths=**} {
 allow read, write;
}}}

このソリューションは、データベースの読み取りおよび書き込みのパブリックアクセス許可を付与する次の手順を使用して、テスト目的でのみ使用します。

28
sumit mehra

私はDBの代わりにファイアーストアのルールを変更しています...私のような愚かな誰かに役立つことを願っています。

enter image description here

18
Zogrof

私は問題が何であるか完全にはわかりませんが、Firebaseからプロジェクトを削除して再作成し、新しいgoogle-services.jsonを削除してインストールすると、2回目には完全に機能しました。

幸い、これはテストアプリであり、データベースは空でしたが、このような状況でアカウントに貴重な情報が保存されている場合は、このソリューションを試す前にエクスポートすることをお勧めします。

2
Ben