Как проверить, зарегистрирован ли пользователь и сопоставить ли данные между данными об аутентификации Firebase и базой данных Firebase Realtime? - PullRequest
0 голосов
/ 18 апреля 2019

я впервые спрашиваю в StackOverflow. Итак, я хотел бы поделиться проблемой на этом форуме. Я зарегистрировал учетную запись для аутентификации firebase и записал ее в Firebase Realtime-Database. Вы можете видеть на этих фотографиях

https://i.ibb.co/TcqDhF7/image.png

https://i.ibb.co/Zc1YnLY/image.png

Проблема при входе. Когда я вошел в систему, я ожидал, что Firebase может сопоставить данные между аутентификацией и базой данных, но это было наоборот. вопрос в том, может ли Firebase сопоставлять данные пользователя между аутентификацией и записью данных в базе данных?

Я пытался изменить свой класс активности входа, как этот

LoginActivity.java

package id.co.dolansemarang.loginfirebaseds;

import android.content.Intent;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

import com.google.android.gms.tasks.OnCompleteListener;
import com.google.android.gms.tasks.Task;
import com.google.firebase.auth.AuthResult;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.auth.FirebaseUser;
import com.google.firebase.database.DataSnapshot;
import com.google.firebase.database.DatabaseError;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import com.google.firebase.database.ValueEventListener;

public class LoginActivity extends AppCompatActivity {
    Button btnLogin;
    EditText edtEmailLogin, edtPasswordLogin;
    FirebaseAuth firebaseAuthLogin;
    DatabaseReference userRefLogin;
    FirebaseUser curUser;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_login);
        btnLogin = findViewById(R.id.btn_login);
        edtEmailLogin = findViewById(R.id.edt_email_login);
        edtPasswordLogin = findViewById(R.id.edt_password_login);
        firebaseAuthLogin = FirebaseAuth.getInstance();
        curUser = FirebaseAuth.getInstance().getCurrentUser();

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

                if (email.isEmpty()) {
                    Toast.makeText(LoginActivity.this, "Masukkan email", Toast.LENGTH_SHORT).show();
                } else {
                    if (password.isEmpty()) {
                        Toast.makeText(LoginActivity.this, "Masukkan password", Toast.LENGTH_SHORT).show();
                    } else {
                        firebaseAuthLogin.signInWithEmailAndPassword(email, password).addOnCompleteListener(LoginActivity.this, new OnCompleteListener<AuthResult>() {
                            @Override
                            public void onComplete(@NonNull Task<AuthResult> task) {
                                if (task.isSuccessful()) {

                                    userRefLogin = FirebaseDatabase.getInstance().getReference().child("Users").child(curUser.getUid());
                                    userRefLogin.addListenerForSingleValueEvent(new ValueEventListener() {
                                        @Override
                                        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                                            if (dataSnapshot.exists()) {
                                                //ambil data password
                                                String passwordFromFirebase = dataSnapshot.child("password").getValue().toString();
                                                //validasi password dengan password di edit text
                                                if (password.equals(passwordFromFirebase)) {
//                                                    menyimpan data ke local storage (handphone)
//                                                    SharedPreferences sharedPreferences = getSharedPreferences(USERNAME_KEY, MODE_PRIVATE);
//                                                    SharedPreferences.Editor editor = sharedPreferences.edit();
//                                                    editor.putString(username_key, etUsername.getText().toString());
//                                                    editor.apply();
                                                    startActivity(new Intent(LoginActivity.this, MainActivity.class));

                                                } else {
                                                    Toast.makeText(LoginActivity.this, "Pasword tidak cocok", Toast.LENGTH_SHORT).show();
                                                }

                                            } else {
                                                Toast.makeText(LoginActivity.this, "Username tidak terdaftar", Toast.LENGTH_SHORT).show();
                                            }
                                        }

                                        @Override
                                        public void onCancelled(@NonNull DatabaseError databaseError) {
                                            Toast.makeText(LoginActivity.this, "Pasword tidak cocok", Toast.LENGTH_SHORT).show();
                                        }
                                    });

                                } else {
                                    Toast.makeText(LoginActivity.this, "Pasword tidak cocok", Toast.LENGTH_SHORT).show();
                                    Log.w("Pesan", "Gagal Masul");
                                }

                            }
                        });
                    }
                }

            }
        });
    }
}

Я полагаю, что firebase может проверять пароли и данные электронной почты на обоих из них, поэтому при входе в приложение Firebase проверяет электронную почту и пароль в Firebase auth и database , Мне нужна помощь: (

Ответы [ 3 ]

0 голосов
/ 18 апреля 2019

Как только вы вошли в систему, получите пользовательский Uid, а затем позвоните в базу данных realTime с этим идентификатором, если datasnapshot имеет значение null, так что пользователь еще не зарегистрировался, иначе вы можете получить информацию о том, что он зарегистрировал. я делаю это так:

 DatabaseReference ref = FirebaseDatabase.getInstance().getReference().child("users/"+uid);
    ref.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {

            //Log.d("dataSnapShotValue",""+dataSnapshot.getValue());
            if (dataSnapshot.getValue()!=null){
              // User exist
            }else{
              //  user dosn't exist
            }
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {
            System.out.println("The read failed: " + databaseError.getCode());
        }
    });
0 голосов
/ 18 апреля 2019
> firebase will  check it Self User is Authenticated or not so you  can not
  to check Manually.




 private void loginUserWithFirebase(String email, String password) {
           firebaseAuthLogin.signInWithEmailAndPassword(email, password)
                   .addOnCompleteListener(getActivity(), new OnCompleteListener<AuthResult>() {
                       @Override
                       public void onComplete(@NonNull Task<AuthResult> task) {

                           if (task.isSuccessful()) {

                               startActivity(new Intent(LoginActivity.this, MainActivity.class));



 }
                           else{

                               Toast.makeText(getContext(), "" + task.getException().toString(), Toast.LENGTH_SHORT).show();
                           }
                       }
                   });
       }
0 голосов
/ 18 апреля 2019

здесь вы можете найти идентификатор электронной почты зарегистрирован или нет: -

    private void loginUserWithFirebase(String email, String password) {
           firebaseAuthLogin.signInWithEmailAndPassword(email, password)
                   .addOnCompleteListener(getActivity(), new OnCompleteListener<AuthResult>() {
                       @Override
                       public void onComplete(@NonNull Task<AuthResult> task) {
                           progressDialog.dismiss();
                           if (task.isSuccessful()) {
                               // here is user registered
                               startActivity(new Intent(LoginActivity.this, MainActivity.class));
                           }
                           else{
                               // here if your is not registered or any elese error will show
                               Toast.makeText(getContext(), "" + task.getException().toString(), Toast.LENGTH_SHORT).show();
                           }
                       }
                   });
       }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...