如何将带有读写规则的firebase用作false

时间:2018-05-28 11:52:21

标签: android firebase firebase-realtime-database firebase-authentication firebase-security-rules

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

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

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

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

1 个答案:

答案 0 :(得分:9)

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

默认

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

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

公开

在开发期间,您可以使用公共规则代替默认规则来将文件设置为可公开读写。这对于原型设计非常有用,因为您可以在不设置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"
      }
    }
  }
}

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

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

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