如何使用 Firebase 并将读写规则设置为 false?

8

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

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

to

{
  "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;
                            }
                        });
                    }
                });

1
你的问题是什么?你想要实现什么? - André Kool
1
你应该阅读一下基于用户的安全性。它包含了如何有效地使用当前用户凭据来保护数据的详细示例。 - CodingIntrigue
1
我已经更新了问题,请再看一遍。 - user9634535
1
你真的需要阅读CodingIntrique在他的评论中链接的文档,所有内容都在那里解释了。 - André Kool
1个回答

16

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

默认规则

默认规则要求进行身份验证。它们允许仅经过身份验证的应用程序用户完全读取和写入访问权限。如果您希望数据对您的应用程序所有用户开放,但不希望对外开放,则这些规则非常有用。

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

作为公共

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

// 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 是通过 身份验证 获得的用户 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控制台编辑和阅读数据。


非常感谢您的帮助,我很感激。 - user9634535
2
实际上,当规则设置为false时,管理员SDK也可以进行读写操作。 - André Kool

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接