Firebase 数据库的匿名身份验证权限被拒绝

久沙9

我有 firebase 数据库,它运行良好,直到规则设置为:

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

但现在我需要启动我的应用程序,所以我不希望我的数据库对所有人开放。这就是为什么我将数据库规则更改为:

{
  "rules": {
    ".read": "auth != null",
    ".write": "auth != null"
  }
}

我从我的安卓应用程序设置了匿名身份验证,但权限被拒绝错误不断显示。顺便说一下,匿名身份验证在模拟器上运行良好。

我是这样实现的:

 public void fireBaseAuthenticate(final Context context) {
     mAuth = FirebaseAuth.getInstance();
     mAuth.signInAnonymously()
         .addOnCompleteListener(new OnCompleteListener<AuthResult>() {
                @Override
                public void onComplete(@NonNull Task<AuthResult> task) {
                    if (task.isSuccessful()) {
                       // debugger comes here, so Authentication is successful 
                    } else {
                       // If sign in fails, display a message to the user.

                    }

                }
    });

}

public void load(final Context context) {

    fireBaseAuthenticate(context);
    database = FirebaseDatabase.getInstance();
    databaseReference = database.getReference();
    databaseReference.addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            for (DataSnapshot categorySnaps : dataSnapshot.getChildren()) {
                RetailChain retailChain = new RetailChain();
                retailChain.setName(categorySnaps.getKey());
                for (DataSnapshot subMenuSnaps : categorySnaps.getChildren()) {
                    for (DataSnapshot itemSnaps : subMenuSnaps.getChildren()) {
                        for (DataSnapshot productSnaps : itemSnaps.getChildren()) {
                            Product product = productSnaps.getValue(Product.class);
                            productList.add(product);
                        }
                    }
                }
                retailChain.setProducts(productList);
                retailChainList.add(retailChain);
            }      
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {
            Log.w("database error: ", "onCancelled", databaseError.toException());
        }
    });

}

添加监听器后singleValueEventOnCancelled被调用。那么为什么许可被拒绝呢?编辑:错误日志:

com.google.firebase.database.DatabaseException: Firebase Database error: 
    Permission denied
    at com.google.firebase.database.DatabaseError.toException(Unknown Source)
    at home.gio.calorieplanner.main.Main$3.onCancelled(Main.java:205)
    at com.google.firebase.database.Query$1.onCancelled(Unknown Source)
    at com.google.android.gms.internal.zzbpx.zza(Unknown Source)
    at com.google.android.gms.internal.zzbqv.zzZT(Unknown Source)
    at com.google.android.gms.internal.zzbra$1.run(Unknown Source)
    at android.os.Handler.handleCallback(Handler.java:739)
    at android.os.Handler.dispatchMessage(Handler.java:95)
    at android.os.Looper.loop(Looper.java:148)
    at android.app.ActivityThread.main(ActivityThread.java:5417)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
法鲁克

当您设置规则时,"auth != null"这意味着用户在完成登录之前无法访问数据库。

并且 Sign In 过程是一个asynchronous,这意味着不会立即调用完整的侦听器。

要解决您的问题,只需将读取数据库的代码移动到完整的侦听器上即可。

public void load(final Context context) {

  fireBaseAuthenticate(context);

}

public void fireBaseAuthenticate(final Context context) {
  mAuth = FirebaseAuth.getInstance();
  mAuth.signInAnonymously()
     .addOnCompleteListener(new OnCompleteListener<AuthResult>() {
            @Override
            public void onComplete(@NonNull Task<AuthResult> task) {
                if (task.isSuccessful()) {
                   // load the data
                   loadFromDB();
                } else {
                   // If sign in fails, display a message to the user.

                }

            }
  });

}


private void loadFromDB(){
  database = FirebaseDatabase.getInstance();
  databaseReference = database.getReference();
  databaseReference.addListenerForSingleValueEvent(new ValueEventListener() {
      @Override
      public void onDataChange(DataSnapshot dataSnapshot) {
        for (DataSnapshot categorySnaps : dataSnapshot.getChildren()) {
            RetailChain retailChain = new RetailChain();
            retailChain.setName(categorySnaps.getKey());
            for (DataSnapshot subMenuSnaps : categorySnaps.getChildren()) {
                for (DataSnapshot itemSnaps : subMenuSnaps.getChildren()) {
                    for (DataSnapshot productSnaps : itemSnaps.getChildren()) {
                        Product product = productSnaps.getValue(Product.class);
                        productList.add(product);
                    }
                }
            }
            retailChain.setProducts(productList);
            retailChainList.add(retailChain);
        }      
      }

      @Override
      public void onCancelled(DatabaseError databaseError) {
        Log.w("database error: ", "onCancelled", databaseError.toException());
      }
  });

}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

身份验证后读取数据时,Firebase权限被拒绝

来自分类Dev

如何从 Firebase 身份验证和数据库授予对特定 UID 的读/写访问权限

来自分类Dev

将 Firebase 身份验证与 Firebase 数据库连接

来自分类Dev

为什么从 Firebase 数据库检索数据不适用于用户身份验证规则但使用匿名规则?

来自分类Dev

Firebase 身份验证和数据库

来自分类Dev

Firebase数据库Swift的权限被拒绝

来自分类Dev

Firebase 数据库:读取权限被拒绝?

来自分类Dev

Firebase 数据库权限被拒绝错误

来自分类Dev

Firebase匿名身份验证

来自分类Dev

Firebase 数据库和 Firebase 身份验证中的不同 UID

来自分类Dev

在没有 Firebase 身份验证的情况下保护 Firebase 数据库

来自分类Dev

Firebase 实时数据库和身份验证库版本不兼容

来自分类Dev

Firebase身份验证/通知实时数据库和数据存储

来自分类Dev

身份验证后无法从Firebase数据库获取用户数据

来自分类Dev

使用身份验证令牌将数据保存到Firebase数据库REST API的示例

来自分类Dev

使用Wordpress用户或数据库对Firebase / Firechat进行身份验证

来自分类Dev

Firebase数据库规则-允许未经身份验证的用户仅过滤查询

来自分类Dev

无法对网络上的多个Firebase实时数据库进行身份验证

来自分类Dev

Firebase Web身份验证并添加到数据库

来自分类Dev

未经身份验证的用户名测试数据库 [Firebase/Swift 3]

来自分类Dev

如何使用 Android Things 对 Firebase 数据库进行身份验证?

来自分类Dev

用于电话身份验证的 Firebase 数据库安全规则

来自分类Dev

RN Firebase 实时数据库身份验证令牌有效负载

来自分类Dev

Firebase 数据库和身份验证中同一用户的 UID 不同

来自分类Dev

身份验证和实时数据库中的 Android Firebase 相关错误

来自分类Dev

在 Firebase 数据库中写入数据时权限被拒绝

来自分类Dev

Firebase电话身份验证可在Ionic 4中使用,但Firebase权限被拒绝

来自分类Dev

匿名使用Firebase进行身份验证

来自分类Dev

Firebase实时数据库规则拒绝权限

Related 相关文章

  1. 1

    身份验证后读取数据时,Firebase权限被拒绝

  2. 2

    如何从 Firebase 身份验证和数据库授予对特定 UID 的读/写访问权限

  3. 3

    将 Firebase 身份验证与 Firebase 数据库连接

  4. 4

    为什么从 Firebase 数据库检索数据不适用于用户身份验证规则但使用匿名规则?

  5. 5

    Firebase 身份验证和数据库

  6. 6

    Firebase数据库Swift的权限被拒绝

  7. 7

    Firebase 数据库:读取权限被拒绝?

  8. 8

    Firebase 数据库权限被拒绝错误

  9. 9

    Firebase匿名身份验证

  10. 10

    Firebase 数据库和 Firebase 身份验证中的不同 UID

  11. 11

    在没有 Firebase 身份验证的情况下保护 Firebase 数据库

  12. 12

    Firebase 实时数据库和身份验证库版本不兼容

  13. 13

    Firebase身份验证/通知实时数据库和数据存储

  14. 14

    身份验证后无法从Firebase数据库获取用户数据

  15. 15

    使用身份验证令牌将数据保存到Firebase数据库REST API的示例

  16. 16

    使用Wordpress用户或数据库对Firebase / Firechat进行身份验证

  17. 17

    Firebase数据库规则-允许未经身份验证的用户仅过滤查询

  18. 18

    无法对网络上的多个Firebase实时数据库进行身份验证

  19. 19

    Firebase Web身份验证并添加到数据库

  20. 20

    未经身份验证的用户名测试数据库 [Firebase/Swift 3]

  21. 21

    如何使用 Android Things 对 Firebase 数据库进行身份验证?

  22. 22

    用于电话身份验证的 Firebase 数据库安全规则

  23. 23

    RN Firebase 实时数据库身份验证令牌有效负载

  24. 24

    Firebase 数据库和身份验证中同一用户的 UID 不同

  25. 25

    身份验证和实时数据库中的 Android Firebase 相关错误

  26. 26

    在 Firebase 数据库中写入数据时权限被拒绝

  27. 27

    Firebase电话身份验证可在Ionic 4中使用,但Firebase权限被拒绝

  28. 28

    匿名使用Firebase进行身份验证

  29. 29

    Firebase实时数据库规则拒绝权限

热门标签

归档