Как сравнить данные Firebase с вводом экрана аутентификации входа. Android - PullRequest
0 голосов
/ 21 октября 2019

Итак, я выполняю функцию входа в систему и мне нужно сравнить данные, которые я хранил в Firebase, с данными, которые я предоставляю на экране входа в систему, чтобы пользователь мог войти в систему, если он зарегистрирован в системе, сейчас он работает только дляпервый конкретный ребенок из «Клиента», но мне нужно, чтобы он работал со всеми, поэтому, когда я добавлю других пользователей, он также сможет их распознать. Его следует сравнить с этими 3 полями из базы данных (адрес электронной почты, пароль, активный).

[База данных] https://imgur.com/a/kL8AS3P

public class LoginScreen extends AppCompatActivity {
    private FirebaseAuth mAuth;
    private DatabaseReference mDatabase;
    EditText email;
    EditText password;
    String username, pass, isActivate;
    @Override
    protected void onCreate(Bundle savedInstanceState) {

        mAuth = FirebaseAuth.getInstance();
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_login_screen);

        email = findViewById(R.id.email_signin);
        password = findViewById(R.id.passwordSignin);

        mDatabase= FirebaseDatabase.getInstance().getReference().child("Customer").child("1");
        mDatabase.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {

                username = dataSnapshot.child("email").getValue().toString();
                pass = dataSnapshot.child("password").getValue().toString();
                isActivate = dataSnapshot.child("active").getValue().toString();

            }

            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) {

            }
        });
    }

    public void backClick(View view) {
        super.onBackPressed();
    }

    public void signIn(View view) {
        if(allowedToSignin()){
            Intent intent = new Intent(this, CustomerScreen.class);
            startActivity(intent);
        }
        else {
            Toast.makeText(LoginScreen.this,"Login failed!", Toast.LENGTH_LONG).show();

        }

    }

    public boolean allowedToSignin(){
        boolean signinAllowed = true;

        if(email.getText().toString().equals(username) && isActivate.equals("true")){
            email.setError(null);
        }else {
            email.setError("enter a valid email");
            signinAllowed = false;
        }
        if (password.getText().toString().equals(pass)){
            password.setError(null);
        }else {
            password.setError("enter a valid password");
            signinAllowed = false;
        }
        return signinAllowed;

    }
}```


  [1]: https://i.stack.imgur.com/QvOla.png

1 Ответ

0 голосов
/ 22 октября 2019

Я бы сделал это наоборот.

1. Пусть пользователь войдет в систему с помощью метода входа Firebase Auth.

2. Получите их идентификатор пользователя с помощью `userId = mAuth.getCurrentUserId ()`

3. Используйте этот идентификатор пользователя в вашей базе данных, чтобы проверить, является ли пользователь активным, если он не вышел из системы автоматически, исгенерируйте ошибку на интерфейсе пользователя.

Это означает, что в вашей базе данных userdata будет в mDatabase= FirebaseDatabase.getInstance().getReference().child("Customer").child(userId);

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...