web-dev-qa-db-ja.com

読み取りルールと書き込みルールをfalseとしてFirebaseを使用する方法

私はプロジェクトに取り組んでおり、アプリを学習してビルドするためにいくつかのチュートリアルに従いました。しかし、それらはすべて、Firebaseの読み取りと書き込みのルールをtrueに変更しますが、これは安全ではありません。例えば彼らは変わる

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

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

これにより、誰でもサーバーデータの読み取りと書き込みを行うことができますが、これは決して安全ではありません。そのため、これをfalseに設定しましたが、ユーザーをFirebaseに登録できず、「アクセスが拒否されました」というエラーが表示されます。それで、今許可を得るために私は何をしなければならないでしょうか。

以前は、このコードを使用して、現在機能していないFirebaseにユーザーを登録していました。

mFirebaseAuth.createUserWithEmailAndPassword(editEmail.getText().toString(), editPass.getText().toString()).addOnSuccessListener(new OnSuccessListener<AuthResult>() {
                    @Override
                    public void onSuccess(AuthResult authResult) {

                        //Saving User to Database

                        User user = new User();
                        user.setEmail(editEmail.getText().toString());
                        user.setName(editName.getText().toString());
                        user.setPassword(editPass.getText().toString());
                        user.setPhone(editPhone.getText().toString());


                        users.child(FirebaseAuth.getInstance().getCurrentUser().getUid()).setValue(user).addOnSuccessListener(new OnSuccessListener<Void>() {
                            @Override
                            public void onSuccess(Void aVoid) {
                                waitingdialog.dismiss();
                                Snackbar.make(rootLayout, "Registration Successful", Snackbar.LENGTH_SHORT).show();
                                return;
                            }
                        }).addOnFailureListener(new OnFailureListener() {
                            @Override
                            public void onFailure(@NonNull Exception e) {
                                waitingdialog.dismiss();
                                Snackbar.make(rootLayout, "Registration Failed" + e.getMessage(), Snackbar.LENGTH_LONG).show();
                                return;
                            }
                        });
                    }
                });
4
user9634535

このため、Firebaseにはさまざまなルールがあり、データベースへのユーザーの登録はそれらのルールに依存します。たとえば、Firebaseには4つのルールがあります。

デフォルトとして

デフォルトのルールには Authentication が必要です。これらは、アプリの認証されたユーザーにのみ完全な読み取りおよび書き込みアクセスを許可します。アプリのすべてのユーザーにデータを公開したいが、世界中に公開したくない場合に便利です。

// These rules require authentication
{
  "rules": {
    ".read": "auth != null",
    ".write": "auth != null"
  }
}

as Public

開発中に、デフォルトのルールの代わりにパブリックルールを使用して、ファイルをパブリックに読み取りおよび書き込み可能に設定できます。 Authentication を設定せずに開始できるため、これはプロトタイピングに役立ちます。このレベルのアクセスは、誰でもデータベースの読み取りまたは書き込みができることを意味します。アプリを起動する前に、より安全なルールを構成する必要があります。

// These rules give anyone, even people who are not users of your app,
// read and write access to your database
{
  "rules": {
    ".read": true,
    ".write": true
  }
}

ユーザーとして

これは、認証された各ユーザーに/ users/$ user_idにある個人ノードを与えるルールの例です。ここで、$ user_idは、 Authentication を通じて取得されたユーザーのIDです。これは、ユーザー専用のデータを持つアプリの一般的なシナリオです。

// These rules grant access to a node matching the authenticated
// user's ID from the Firebase auth token
{
  "rules": {
    "users": {
      "$uid": {
        ".read": "$uid === auth.uid",
        ".write": "$uid === auth.uid"
      }
    }
  }
}

as Privateプライベートルールは、ユーザーによるデータベースへの読み取りおよび書き込みアクセスを無効にします。これらのルールでは、Firebaseコンソールからのみデータベースにアクセスできます。

// These rules don't allow anyone read or write access to your database
{
  "rules": {
    ".read": false,
    ".write": false
  }
}

読み取りおよび書き込み権限をfalseとしてデータベースにユーザーを登録すると、Firebaseコンソールからデータを編集および読み取る権限のみが付与されます。

12
Matt