当前位置: 首页 > 知识库问答 >
问题:

拒绝对Firebase实时数据库的权限

曹凯泽
2023-03-14

我有这样设置的firebase数据库规则

"Users":{
        
         "$user_id":{

            "Name":{
                    ".read":"auth != null",
                    ".write":"auth.uid == $user_id"
                },

            "Email":{
                    ".read":"auth != null",
                    ".write":"auth.uid == $user_id"
                },

            "Address":{
                    ".read":"auth != null",
                    ".write":"auth.uid == $user_id"
                },

            "Photo":{
                    ".read":"auth != null",
                    ".write":"auth.uid == $user_id"
                },

            "Number":{
                    ".read":"auth.uid == $user_id",
                    ".write":"auth.uid == $user_id"
                }
,
            "Current":{
                    ".read":"auth != null",
                    ".write":"auth.uid == $user_id"
            }
         }

       }
FirebaseAuth mAuth = FirebaseAuth.getInstance();
DatabaseReference userRef = FirebaseDatabase.getInstance().getReference().child(FirebaseConstants.USERS).child(mAuth.getCurrentUser().getUid());

if(mAuth.getCurrentUser() !=null)
{
    Log.i("DetailsActivity","User id "+mAuth.getCurrentUser().getUid());

}
else
{
    Log.i("DetailsActivity","User not authenticated");
}
                       
userRef.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
    public void onDataChange(@NonNull DataSnapshot dataSnapshot) {

                if(dataSnapshot.hasChild(FirebaseConstants.NAME))
                {
                    Name = dataSnapshot.child(FirebaseConstants.NAME).getValue().toString();
                    UserNameEdittext.append(Name);

                }
                if(dataSnapshot.hasChild(FirebaseConstants.EMAIL))
                {
                    Email = dataSnapshot.child(FirebaseConstants.EMAIL).getValue().toString();
                    UserEmailEdittext.append(Email);
                }
                userInfoProgressbar.setVisibility(View.INVISIBLE);

            }

            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) {

                userInfoProgressbar.setVisibility(View.INVISIBLE);
                Log.i("DetailsActivity","error "+databaseError);

            }
            
});                    
  
I/DetailsActivity: User id KfiIFOEGWQZIc5UREqX8qo4Nmkn1
I/DetailsActivity: error DatabaseError: Permission denied
userRef.child(FirebaseConstants.NAME).addListenerForSingleValueEvent(new ValueEventListener() {
@Override
    public void onDataChange(@NonNull DataSnapshot dataSnapshot) {

                if(dataSnapshot.exists())
                {
                    Name = dataSnapshot.getValue().toString();
                    Log.i("DetailsActivity","Name "+Name);

                }

            }

            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) {

                userInfoProgressbar.setVisibility(View.INVISIBLE);
                Log.i("DetailsActivity","error "+databaseError);

            }        
});
I/DetailsActivity: Name elsonjose

任何帮助都很感激。提前谢了。

共有1个答案

袁元明
2023-03-14

假设您的默认值设置为:

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

您确实有单个字段的规则,但是在读取整个用户记录时可能会得到“权限被拒绝”,因为您没有为“$user_id”路径本身设置任何规则。尝试添加:

    "Users": {
          "$user_id": {
            // Allow only authenticated content owners access to their data
            ".read": "auth != null && auth.uid == $user_id",
            ".write": "auth != null && auth.uid == $user_id"
          } 
...
 类似资料:
  • 我正试图按照Firebase的在线指南使用Firebase实时数据库,但由于我的许可被拒绝,我无法获得数据库的任何更新。我不确定我做错了什么。我甚至设定了阅读和写作的规则。 onClickListener内的代码如下: 这是在片段中,按钮在开始片段替换事务之前首先完成这些语句。 以下是Firebase中的规则: 由于我不熟悉JSON,我也尝试过在“.write”结尾加逗号 这是stacktrace

  • 我在Kotlin构建了一个应用程序,在节点中有一个后端。js。我允许用户在客户端应用程序上使用Firebase身份验证登录/注册。 该应用程序的部分功能是让用户通过Firebase的实时数据库在线保存数据。应用程序内部发生的事情是,一旦用户登录,我就会将他/她的uid传递到后端,后端会向数据库发出请求。 当数据库的规则是允许每个人读/写时,一切都正常工作。一旦我把它们改成这样: } 我一直被拒绝许

  • Firebase规则包括: 代码 它会导致一个错误: [错误:flatter/lib/ui/ui_dart_state.cc(166)]未处理的异常:PlatformException(-3,权限被拒绝,)E/flatter(31408):#0 StandardMethodCodec。解码信封(包:flatter/src/services/message_编解码器。dart:569:7)E/fla

  • 问题内容: 我对编码比较陌生,遇到了麻烦。 我有这段代码可以将数据发送到Firebase 但是,我不断收到错误: FIREBASE警告:设置为/ users /(GoogleID)失败:Permission_denied 2016-05-23 22:52:42.707 firebase.js:227未捕获(承诺)错误:PERMISSION_DENIED:权限被拒绝(…) 当我尝试查找时,它谈论的是

  • 与firebase_ auth和firebase_。使用电子邮件和密码进行身份验证。这是用于身份验证和处理身份验证更改事件的代码提取。验证成功后,代码将用户信息插入实时数据库。如果数据库规则设置为读/写真,则一切正常。但是,使用标准数据库写入规则(auth!=null),应用程序抛出DatabaseError:权限被拒绝。数据库插件似乎不知道经过身份验证的身份?你知道怎么回事吗? 然后: 我已经写

  • 我试图按照https://github.com/Heroku/python-getting-start上的说明为python开发建立一个Heroku环境。当我运行: > 首先提示我输入密码:我在postgres中输入了用户“postgres”的密码 收到一条错误消息: createdb数据库创建失败:错误:拒绝创建数据库的权限 不知道怎么解决这个问题。允许用户“postgres”创建数据库。我使用

  • 我一直在尝试使用数据库规则和通过CLI托管来创建一个基本上是公共的数据库,但有一些限制。如果我根据规则声明数据库已打开,我可以访问该数据库,但如果我从顶层删除读/写操作并尝试仅访问一个子“规则”,我会遇到权限错误: [2018-10-04T16:13:56.926Z]@firebase/database:firebase警告:设置为/2019/statistics/topTens/Strider