如何将firebase与读写规则一起使用为false

4 android firebase firebase-authentication firebase-realtime-database firebase-security-rules

我正在研究一个项目,我学习了几个教程,以便学习和构建应用程序.但是所有这些,他们将Firebase的读写规则更改为true,这是不安全的.例如他们改变了

{
  "rules": {
    ".read": false,
    ".write": false
  }
}
Run Code Online (Sandbox Code Playgroud)

{
  "rules": {
    ".read": true,
    ".write": true
  }
}
Run Code Online (Sandbox Code Playgroud)

这使得任何人都可以以任何方式读取和写入不安全的服务器数据.因此我把它变成了假,现在我无法将用户注册到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;
                            }
                        });
                    }
                });
Run Code Online (Sandbox Code Playgroud)

Mat*_*att 12

出于这个原因,Firebase中有不同的规则,用户注册到数据库取决于这些规则,例如Firebase提供了四条规则

作为默认

默认规则需要身份验证.它们仅允许对应用程序的经过身份验证的用户进行完全读写访问.如果您希望数据对应用的所有用户开放但不希望向全世界开放,则它们非常有用

// These rules require authentication
{
  "rules": {
    ".read": "auth != null",
    ".write": "auth != null"
  }
}
Run Code Online (Sandbox Code Playgroud)

作为公众

在开发过程中,您可以使用公共规则代替默认规则来将文件设置为可公开读写.这对于原型设计非常有用,因为您无需设置身份验证即可开始使用.这种访问级别意味着任何人都可以读取或写入您的数据库.您应该在启动应用程序之前配置更安全的规则.

// 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
  }
}
Run Code Online (Sandbox Code Playgroud)

作为用户

以下是一个规则的示例,该规则为每个经过身份验证的用户提供/ users/$ user_id中的个人节点,其中$ user_id是通过身份验证获取的用户的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"
      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

由于私有 私有规则禁止用户对您的数据库进行读写访问.使用这些规则,您只能通过Firebase控制台访问数据库.

// These rules don't allow anyone read or write access to your database
{
  "rules": {
    ".read": false,
    ".write": false
  }
}
Run Code Online (Sandbox Code Playgroud)

要将用户注册到数据库,而读取和写入权限为false,则只允许您编辑和读取Firebase控制台中的数据.

  • 实际上,当规则设置为 false 时,admin SDK 也可以读取/写入。 (2认同)