如何使用具有读写规则的firebase为false

Posted

技术标签:

【中文标题】如何使用具有读写规则的firebase为false【英文标题】:How to use firebase with read and write rules as false 【发布时间】:2018-11-07 00:20:24 【问题描述】:

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

【问题讨论】:

您的问题到底是什么?你想达到什么目标? 您应该阅读User Based Security。它包含有关如何有效保护您的数据用户当前用户凭据的详细示例 我已经更新了问题,请再看看。 你真的需要阅读他评论中链接到的文档 CodingIntrique,这一切都在那里解释。 【参考方案1】:

出于这个原因,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 控制台编辑和读取数据的权限。

【讨论】:

非常感谢您的帮助。 Acually admin SDK 在规则设置为 false 时也可以读/写。

以上是关于如何使用具有读写规则的firebase为false的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Flutter 和 Firebase 为聊天应用制定规则

与 firebase 规则混淆(读写)

Firebase 实时规则如何检查具有 AutoID 的节点是不是包含正确的数据

如何在Firebase上为cURL添加身份验证系统?

Firebase 规则在设置为 true 时显示权限错误

Firebase 安全规则完全打开,但仍然授予权限被拒绝错误