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規則,則訪問將被拒絕。

注:較淺的安全規則,在更深的路徑覆蓋規則。子規則只能授予父節點已經聲明的附加特權。他們不能撤銷讀或寫權限。

審查許可被被拒絕,並使用規則選項卡上的模擬器,以測試你的規則,針對不同用戶的安全上下文(未通過認證,認證等)

相關問題