2017-01-20 10 views
0

Firebaseリアルタイムデータベースにデータを挿入しようとしています。私のアプリケーションのロジックは、ユーザーがサインアップしているときにデータベースのユーザー列の下にユーザー名とパスワードを含む新しいフィールドを作成することです。Android Firebaseリアルタイムデータベースは、新しいデータを追加する代わりにデータを置き換えます。

申し込み時に、電子メール、ユーザー名、およびパスワードが必要です。私はこれを行うためにFirebase Authを使用しています。私はアプリケーションを実行すると、私はサインアップし、データベースの値を正常に挿入することができますが、新しいユーザーを作成するのではなく、新しいユーザーがサインアップするたびに値がデータベースに置き換えられます。 私が間違っていると助けてください。これは私のコードです。

firebaseAuth.createUserWithEmailAndPassword(email, password) 
       .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() { 
        @Override 
        public void onComplete(@NonNull Task<AuthResult> task) { 
         UserInformation userInformation = new UserInformation(username,password); 
         //checking if success 
         if(task.isSuccessful()){ 

          databaseReference.child("users").setValue(userInformation); 
          Toast.makeText(MainActivity.this,"Successfully registered",Toast.LENGTH_LONG).show(); 
          finish(); 
          startActivity(new Intent(getApplicationContext(), ProfileActivity.class)); 
         }else{ 
          //display some message here 
          Toast.makeText(MainActivity.this,"Registration Error",Toast.LENGTH_LONG).show(); 
         } 
         progressDialog.dismiss(); 
        } 
       }); 
+3

データベースにプレーンテキストのパスワードを保存することは非常に注意してください。これは非常に悪い習慣であり、ユーザーの信頼を失うすばらしい方法です。 –

答えて

2
databaseReference.child("users").setValue(userInformation) 

これは、既存のデータを置き換えます。値を新しい子として追加する場合は、push()を使用する必要があります。これにより、一意のIDが生成され、新しいデータが挿入されます。以下のコードを試してみてください。

databaseReference.child("users").push().setValue(userInformation) 
+3

私たちがユーザーについて話しているとき、プッシュIDの代わりにUIDの下にそれらを格納することをお勧めします: 'databaseReference.child(" users ")child(task.getUser().getUid())。setValue(userInformation ) '。これにより、後でユーザーの情報を簡単に検索し、各ユーザーを一度だけ格納することが容易になります(同じユーザーに次回ログオンすると同じUIDが付与されるため)。 –

関連する問題