1

私はユーザの電子メールとpwd認証を必要とするアンドロイドプロジェクトに取り組んでいます。詳細はfirebaseデータベースに保存されています。この問題は、電子メールとパスワードで再度ログインしようとするたびに発生します。私のlogcatでエラーメッセージは次のとおりです。Android Firebaseデータベースエラー:許可が拒否されました

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

考えられる理由は次のような理由が考えられます。データベースに読み書きアクセス権がありません。 読み取りと書き込みアクセスを有効にするには

データベースに読み書き操作を有効にします。

Firebaseコンソール - >データベース(開発) - >は、データベース・コンソール上の[ルール]タブに

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

ありがとう。問題はルールのセクションではありませんでしたが、あなたが返答してうれしいです。みんな、ありがとう。 – Nzadibe

2

移動を支配します。ユーザーに.readアクセス権を明示的に付与していない場合、アクセス権は拒否されます。

このリンクはFirebase docにも優れている:

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

そのページ上のこれらの2冊のノートには、特に重要である:

注:アクセスはデフォルトで許可されていません。 .writeルールまたは.readルールがパスまたはその上に指定されていない場合、アクセスは拒否されます。

注:シャワのセキュリティルールは、より深いパスのルールよりも優先されます。子ルールは、親ノードが既に宣言しているものにのみ追加の権限を付与できます。彼らは、読み取りまたは書き込み特権を取り消すことはできません。 (など認証された非認証、)

レビューの許可が拒否され、別のユーザーのセキュリティコンテキストのためにあなたのルールをテストするためにルール]タブでシミュレータを使用しているノード

関連する問題