2

Androidアプリケーションを作成しています。最初に電子メールとパスワードでユーザーをログインし、次にOnCompleteメソッドでタスクが成功すると、データベース上のデータにアクセスしようとしています。しかし、毎回私はListen at/failedというメッセージを得る。次のようにFirebaseの認証後に許可が拒否されました

私の主な活動のコードがある -

private FirebaseAuth auth; 
private EditText inputEmail, inputPassword; 
private Button btnLogin; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    Firebase.setAndroidContext(this); 
    //Get Firebase auth instance 
    auth = FirebaseAuth.getInstance(); 

    if (auth.getCurrentUser() != null) { 
     startActivity(new Intent(MainActivity.this, MainActivity.class)); 
     finish(); 
    } 

    setContentView(R.layout.activity_main); 
    inputEmail = (EditText) findViewById(R.id.txtMobile); 
    inputPassword = (EditText) findViewById(R.id.txtPassword); 
    btnLogin = (Button) findViewById(R.id.btnLogin); 

    auth = FirebaseAuth.getInstance(); 


    btnLogin.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      String email = inputEmail.getText().toString(); 
      final String password = inputPassword.getText().toString(); 


      //authenticate user 
      auth.signInWithEmailAndPassword(email, password) 
        .addOnCompleteListener(MainActivity.this, new OnCompleteListener<AuthResult>() { 
         @Override 
         public void onComplete(@NonNull Task<AuthResult> task) { 
          // 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()) { 
           // there was an error 
           Log.e("Invalid","Invalid"); 

          } else { 
           /*Intent intent = new Intent(MainActivity.this, Second.class); 
           startActivity(intent); 
           finish();*/ 
           Firebase.getDefaultConfig(); 

           auth = FirebaseAuth.getInstance(); 

           if (auth.getCurrentUser() != null) { 
            Log.e("awesome",auth.getCurrentUser().getEmail()); 
           } 

           Firebase firebase = new Firebase("https://test-fd3f2.firebaseio.com"); 
           firebase.addChildEventListener(new ChildEventListener() { 
            // Retrieve new posts as they are added to Firebase 
            @SuppressWarnings("unchecked") 
            @Override 
            public void onChildAdded(DataSnapshot snapshot, String previousChildKey) { 
             if(snapshot.getValue()!= null) { 
              String mobileNum = snapshot.getValue().toString(); 
              Log.e("here", mobileNum); 
             } 
             //Log.e("Title: ",newPost.get("password").toString()); 
            } 

            @Override 
            public void onChildChanged(DataSnapshot dataSnapshot, String s) { 

            } 

            @Override 
            public void onChildRemoved(DataSnapshot dataSnapshot) { 

            } 

            @Override 
            public void onChildMoved(DataSnapshot dataSnapshot, String s) { 

            } 

            @Override 
            public void onCancelled(FirebaseError firebaseError) { 
             Log.e("Cancel",firebaseError.getCode()+""); 
             Log.e("Cancel",firebaseError.getDetails()); 
             Log.e("Cancel",firebaseError.getMessage()); 
            } 
            //... ChildEventListener also defines onChildChanged, onChildRemoved, 
            // onChildMoved and onCanceled, covered in later sections. 
           }); 
          } 
         } 
        }); 
     } 
    }); 


} 

UPDATE - マイfirebaseルールfollows-

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

エラーは何ですか? – Danieboy

+0

「W/SyncTree:Listen at/failed:FirebaseError:Permission denied」は正確なエラーです。データベースからデータを読み取ることができません。 –

+0

auth!= nullの場合にのみデータを表示するルールを使用しています。ログイン後、私はログインしたユーザーの電子メールを取得できますが、依然として拒否されたアクセス許可が表示されます。 –

答えて

7

ようであるあなたは、異なるFirebase SDKを混合している:

  • auth.signInWithEmailAndPassword()は、新しい3.x/9.x Firebase SDKのものです
  • new Firebase()が新しいSDKへのサインインFirebase 2.xのSDK

からある、古いSDKのバージョンで作られたデータベースへの接続を認証しません。したがって、データベース接続はまだ認証されていません。

解決策は、build.gradleファイルのすべてのFirebaseライブラリに対して単一のバージョン(9.x)を使用することです。

+0

新しいsdkを使用してデータベースにアクセスする方法を教えてください。 –

+0

https://firebase.google.com/docs/database/android/start/ –

+0

あなたは私の人生を救った。どうもありがとうございます。私は本当にあなたに非常にgreateです。 –

関連する問題