使用身份validation拒绝(读取和写入)Firebase权限

我想在我的数据库中读取和写入身份validation,但我得到了两个Permission denied 。 我想弄清楚它为什么不起作用。

我使用默认规则,因为我想要身份validation,如文档中所述。

默认规则需要身份validation。 它们允许对应用程序的经过身份validation的用户进行完全读写>访问。 如果您希望数据打开>应用程序的所有用户但不希望它向全世界开放,则它们非常有用。

  • Firebase规则:

     { "rules": { ".read": "auth != null", ".write": "auth != null" } } 
  • 创建用户 :

      auth.createUserWithEmailAndPassword(email, password) .addOnCompleteListener(this, new OnCompleteListener() { @Override public void onComplete(@NonNull Task task) { Log.d("USER_CREATE", "createUserWithEmail:onComplete:" + task.isSuccessful()); // If sign in fails, display a message to the user. If sign in succeeds // the auth state listener will be notified and logic to handle the // signed in user can be handled in the listener. if (!task.isSuccessful()) { Toast.makeText(getApplicationContext(), "Authentication failed.", Toast.LENGTH_SHORT).show(); } else { startActivity(new Intent(SignupActivity.this, MainActivity.class)); finish(); } // ... } }); 
  • 登录用户:

     auth.signInWithEmailAndPassword(email, password) .addOnCompleteListener(this, new OnCompleteListener() { @Override public void onComplete(@NonNull Task task) { Log.d("COMPLETE", "signInWithEmail:onComplete:" + task.isSuccessful()); } }); 

我有一个AuthListener ,它记录我用户已登录。

  • AuthListener:

     mAuthListener = new FirebaseAuth.AuthStateListener() { @Override public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) { FirebaseUser user = firebaseAuth.getCurrentUser(); if (user != null) { // User is signed in Log.d("TAG", "onAuthStateChanged:signed_in:" + user.getUid()); } else { // User is signed out Log.d("TAG", "onAuthStateChanged:signed_out"); } // ... } }; // ... 
  • 读测试:(我在数据库中手动添加了一个节点)

     firebase.child("test").addValueEventListener(new ValueEventListener() { @Override public void onDataChange(DataSnapshot snapshot) { Log.d("result", snapshot.getValue()+""); } @Override public void onCancelled(FirebaseError error) { Log.d("The read failed: ", error.getMessage()); } }); 
  • 写测试 :我想要一个拥有两类用户的主节点用户: devsemployers

     Firebase usersRef = firebase.child("users").child("devs"); FirebaseUser user = auth.getCurrentUser(); Map userMap = new HashMap(); userMap.put("name", "blabla"); userMap.put("city", "Brussels"); Map<String, Map> users = new HashMap<String, Map>(); users.put(user.getUid().toString(), userMap); usersRef.setValue(users); 
  • 日志:

     D/AUTH LISTENER: onAuthStateChanged:signed_in:wnomkwiOWOb4wNNLSsrWeT5xxUq1 D/USER_CREATE: createUserWithEmail:onComplete:true I/AppCompatViewInflater: app:theme is now deprecated. Please move to using android:theme instead. D/ACTION BAR?: android.support.v7.app.ToolbarActionBar@36c3cd2a W/SyncTree: Listen at /test failed: FirebaseError: Permission denied D/The read failed:: Permission denied D/FirebaseAuth: Notifying listeners about user ( wnomkwiOWOb4wNNLSsrWeT5xxUq1 ). D/FirebaseAuth: Notifying listeners about user ( wnomkwiOWOb4wNNLSsrWeT5xxUq1 ). D/FirebaseApp: Notifying auth state listeners. D/FirebaseApp: Notified 0 auth state listeners. D/AUTH LISTENER: onAuthStateChanged:signed_in:wnomkwiOWOb4wNNLSsrWeT5xxUq1 D/FirebaseApp: Notifying auth state listeners. D/FirebaseApp: Notified 0 auth state listeners. D/AUTH LISTENER: onAuthStateChanged:signed_in:wnomkwiOWOb4wNNLSsrWeT5xxUq1 D/COMPLETE: signInWithEmail:onComplete:true 

我使用公共权限进行了这两个测试(写:true,读:true)并且它正常工作,因此我的身份validation必定存在问题。 我可能误解/遗漏了一些东西但却没有真正看到究竟是什么。 如果有人想开导我会很好!

您将旧的Firebase SDK与新的Firebase SDK混合使用。 从build.gradle中删除firebase-android-sdk 2.5.2并更新导入以使用新的DatabaseReference类而不是Firebase类。