检查用户是否在特定子级中以登录Firebase

时间:2018-12-28 00:10:26

标签: android firebase login

我正在使用Firebase数据库制作一个android应用程序,我想检查该用户是否未注册为“协会”,因此我正在检查他是否属于子级“协会”。 如果userLogin方法位于子“ Associations”下,则该用户不应登录,否则,请登录该用户。 但是,它不起作用,即使该用户位于“关联”下,也已登录

    private void userLogin() {
    String email = editTextEmail.getText().toString().trim();
    String password = editTextPassword.getText().toString().trim();



    mAuth.signInWithEmailAndPassword(email, password).addOnCompleteListener(new OnCompleteListener<AuthResult>() {
        @Override
        public void onComplete(@NonNull Task<AuthResult> task) {
            progressBar.setVisibility(View.GONE);
            if (task.isSuccessful()) {

                FirebaseUser currentUser = FirebaseAuth.getInstance().getCurrentUser();
                String RegisteredUserID = currentUser.getUid();

                DatabaseReference jLoginDatabase = FirebaseDatabase.getInstance().getReference().child("Associations").child(RegisteredUserID);

                jLoginDatabase.addValueEventListener(new ValueEventListener() {
                    @Override
                    public void onDataChange(DataSnapshot dataSnapshot) {

                        if(dataSnapshot.exists()) {
                            Toast.makeText(getApplicationContext(), "You are not registered", Toast.LENGTH_SHORT).show();
                        }
                        else
                        {
                            finish();
                            Intent intent = new Intent(SignInDonor.this, homedonor.class);
                            intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                            startActivity(intent);
                        }



            }
                    @Override
                    public void onCancelled(DatabaseError databaseError) {

                    }});}
            else {
                Toast.makeText(getApplicationContext(), task.getException().getMessage(), Toast.LENGTH_SHORT).show();
            }
        }
    });
}

1 个答案:

答案 0 :(得分:1)

我没有尝试过,但是它应该可以工作,首先,在用用户登录并进入task.isSuccessful内部之后,您可以使用task.getResult().getUser().getUid()检索当前登录的用户。然后,只需在Associations中循环并获取每个用户密钥(我假设Associations内部具有具有特定值的userID作为节点),然后比较当前登录的用户是否等于该节点内部的用户,如果匹配则弹出您的Toast ,否则,您将被重定向。

尝试

public void onComplete(@NonNull Task<AuthResult> task) {
                progressBar.setVisibility(View.GONE);
                if (task.isSuccessful()) {

                    DatabaseReference jLoginDatabase = FirebaseDatabase.getInstance().getReference().child("Associations");

                    jLoginDatabase.addListenerForSingleValueEvent(new ValueEventListener() {
                        @Override
                        public void onDataChange(DataSnapshot dataSnapshot) {

                        for(DataSnapshot snapshot : dataSnapshot.getChildren()){

                             if(snapshot.getKey().equals(task.getResult().getUser().getUid()) {
                                Toast.makeText(getApplicationContext(), "You are not registered", Toast.LENGTH_SHORT).show();
                            }
                            else
                            {
                                finish();
                                Intent intent = new Intent(SignInDonor.this, homedonor.class);
                                intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                                startActivity(intent);
                            }

                       }

我使用addListenerForSingleValueEvent是因为我们只需要在引用处循环一次,而不必继续监听数据