1

我工作的一个Android项目,需要用户的电子邮件和PWD认证。详细信息存储在火力每当我尝试用电子邮件和密码,再次登录时database.The问题。在我的logcat错误消息是:Android的火力地堡数据库错误:权限被拒绝

W/SyncTree: Listen at/failed: DatabaseError: Permission denied 

低于我的代码看看:

public class LoginUser extends AppCompatActivity { 

private RelativeLayout relativeLayout; 

private EditText et_email, et_password; 
private Button loginBtn; 

private FirebaseAuth mAuth; 
private FirebaseAuth.AuthStateListener authStateListener; 
private DatabaseReference databaseReference; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_login_user); 

    mAuth = FirebaseAuth.getInstance(); 
    databaseReference = FirebaseDatabase.getInstance().getReference(); 
    databaseReference.keepSynced(true); 

    relativeLayout = (RelativeLayout) findViewById(R.id.activity_login_user); 

    et_email = (EditText) findViewById(R.id.emailField); 
    et_password = (EditText) findViewById(R.id.pwdField); 
    loginBtn = (Button) findViewById(R.id.loginBtn); 

    loginBtn.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      initLogin(); 
     } 
    }); 

    authStateListener = new FirebaseAuth.AuthStateListener() { 
     @Override 
     public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) { 
      if (firebaseAuth.getCurrentUser() != null){ 
       initLogin(); 
      } 
      else { 
       startActivity(new Intent(LoginUser.this,RegisterFireBase.class)); 
      } 
     } 
    }; 

} 

@Override 
protected void onStart() { 
    super.onStart(); 
    mAuth.addAuthStateListener(authStateListener); 
} 

@Override 
protected void onStop() { 
    super.onStop(); 
    if (mAuth != null){ 
     mAuth.removeAuthStateListener(authStateListener); 
    } 
} 

private void initLogin() { 

    String email = et_email.getText().toString().trim(); 
    String pass = et_password.getText().toString().trim(); 

    if (!TextUtils.isEmpty(email) && !TextUtils.isEmpty(pass)){ 
     mAuth.signInWithEmailAndPassword(email,pass).addOnCompleteListener(this, new OnCompleteListener<AuthResult>() { 
      @Override 
      public void onComplete(@NonNull Task<AuthResult> task) { 

       checkForUser(); 

      } 
     }); 
    } 
    else { 
     Toast.makeText(this, "Some fields are empty", Toast.LENGTH_SHORT).show(); 
    } 

} 

private void checkForUser() { 

    final String userId = mAuth.getCurrentUser().getUid(); 
    databaseReference.addValueEventListener(new ValueEventListener() { 
     @Override 
     public void onDataChange(DataSnapshot dataSnapshot) { 
      if (dataSnapshot.hasChild(userId)){ 

       Intent loginIntent = new Intent(LoginUser.this, FireProfile.class); 
       loginIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
       startActivity(loginIntent); 

       Snackbar.make(relativeLayout,"Log In Successful",Snackbar.LENGTH_LONG).show(); 

      } 
     } 

     @Override 
     public void onCancelled(DatabaseError databaseError) { 

     } 
    }); 
} 

}

可能是什么造成的?

+0

没有太多我们的节点可以说,除了什么错误消息已经说:你想阅读你没有访问数据。为了让我们更有帮助,请分享最小* JSON和安全规则,这将触发此错误。 –

回答

0

可能的原因是:你没有读,写你的数据库访问权限。 为使读写访问:

转到火力控制台,使阅读并在数据库中写入操作。

火力地堡控制台 - >数据库(开发) - >规则

{ 
    "rules": { 
    ".read": "true", 
    ".write": "true" 
    } 
} 
+0

非常感谢。问题不在规则部分,但很高兴您回复。感谢大家。 – Nzadibe

2

转到您的数据库控制台上的规则选项卡。如果你没有明确授予.read访问权限,那么权限将被拒绝。

此链接是极好的火力地堡DOC:

https://firebase.google.com/docs/database/security/securing-data

在该网页上,这两个音符是特别感兴趣的:

注:访问是默认不允许的。如果在路径上或以上没有指定.write或.read规则,则访问将被拒绝。

注:较浅的安全规则,在更深的路径覆盖规则。子规则只能授予父节点已经声明的附加特权。他们不能撤销读或写权限。

审查许可被被拒绝,并使用规则选项卡上的模拟器,以测试你的规则,针对不同用户的安全上下文(未通过认证,认证等)

相关问题