提问者:小点点

如何解决Android上的firebase权限被拒绝错误?


应用程序一直挂在应用程序试图访问firebase数据库的地方。 我的应用程序显示它一直在加载。 错误日志显示

E/fragment1:com.google.Firebase.Database.DatabaseException:Firebase数据库错误:拒绝权限

安全规则:

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

当我关闭我的应用程序并重新打开它时,它就可以访问数据库,因此它可以完美地运行,并在我的仪表板上创建一个新的身份验证uid。

当我查看创建当前用户的代码时。 这是密码。 正如您在下面的代码中看到的,有一个名为“!!!!MCurrentUser”的日志。 新安装应用程序时,不应打印此日志。 但在我删除应用程序并重新安装后,不知何故,应用程序打印出“!!!!mCurrentUser”。 所以我猜firebase数据库系统会以某种方式识别出我的手机为当前用户,即使我删除了应用程序。 有人对此有什么想法吗? 提前谢谢你。

    mAuth = FirebaseAuth.getInstance();
    mCurrentUser = mAuth.getCurrentUser();

    if (mCurrentUser == null) {
        Log.d("UserNull", "test");
        mAuth.signInAnonymously().addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
            @Override
            public void onComplete(@NonNull Task<AuthResult> task) {
                if (task.isSuccessful()) {
                    Log.d("signIn", "test");
                    if (mInterstitialAd.isLoaded()) {
                        mInterstitialAd.show();
                        mInterstitialAd.setAdListener(new AdListener() {
                            @Override
                            public void onAdClosed() {
                                //TODO: Intent
                                //
                                Intent intent = new Intent(getBaseContext(), MainActivity.class);
                                startActivity(intent);


                            }
                        });
                    } else {
                        //TODO: Intent
                        Intent intent = new Intent(getBaseContext(), MainActivity.class);
                        startActivity(intent);



                    }

                } else {
                    Log.d("authentication failed", "failed");
                }
            }
        });
    } else {
        Log.d("!!!!mCurrentUser", String.valueOf(mCurrentUser.getUid()));
        Handler h = new Handler();
        h.postDelayed(new Runnable() {
            @Override public void run() {
                if (mInterstitialAd.isLoaded()) {
                    mInterstitialAd.show();
                    mInterstitialAd.setAdListener(new AdListener() {
                        @Override
                        public void onAdClosed() {
                            //TODO: Intent
                            //
                            Intent intent = new Intent(getBaseContext(), MainActivity.class);
                            startActivity(intent);


                        }
                    });
                } else {
                    //TODO: Intent
                    Intent intent = new Intent(getBaseContext(), MainActivity.class);
                    startActivity(intent);



                }

            }
        }, 1000);

    }
}


共1个答案

匿名用户

我猜这个问题是由于firebase权限造成的,所以我建议您查看此链接以获得更多详细信息:

https://firebase.google.com/docs/database/security/quickstart