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

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

我正在做一个项目,为了学习和构建应用程序,我遵循了一些教程。但是所有这些,他们都将 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;
                            }
                        });
                    }
                });

最佳答案

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

默认

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

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

公开

在开发过程中,您可以使用公共(public)规则代替默认规则来将您的文件设置为公开可读可写。这对于原型(prototype)设计很有用,因为您无需设置 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。 .对于任何拥有用户私有(private)数据的应用来说,这是一种常见的情况。

// 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"
      }
    }
  }
}

私有(private) 私有(private)规则禁用用户对数据库的读写访问。使用这些规则,您只能通过 Firebase 控制台访问数据库。

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

如果将用户注册到数据库,而读写权限为 false,则只会授予您从 Firebase 控制台编辑和读取数据的权限。

关于android - 如何将 firebase 与读写规则一起使用为 false,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50565807/

相关文章:

android - 在全屏模式下如何将 Android 平板电脑浏览器 Flash 电影锁定为横向

安卓单元测试: how to clear SharedPreferences

Android 穿戴设置 Activity

c# - 将通用图像加载器绑定(bind)到 Xamarin 解决方案

javascript - 无法使用 Cloud Functions 访问 Datasnapshot 值

Android 通知未显示在 API 级别 16 上

flutter - 如何从 Flutter 中的列表中提取 JSON?

javascript - Firebase 实时数据库 - 没有嵌套 promise 的多个顺序获取和写入操作

ios - 使用 Firebase 计算相同的操作 (swift)

javascript - 如何知道异步 forEach 何时完成