Android 检查用户是否在登录firebase的特定子级中
我正在使用Firebase数据库制作一个android应用程序,我想检查该用户是否未注册为“关联”,因此我正在检查他是否属于子“关联”。 如果用户处于子“Associations”下,则userLogin方法不应登录该用户,否则应登录该用户。 但是,它不起作用,即使用户处于“关联”状态,也会登录Android 检查用户是否在登录firebase的特定子级中,android,firebase,login,Android,Firebase,Login,我正在使用Firebase数据库制作一个android应用程序,我想检查该用户是否未注册为“关联”,因此我正在检查他是否属于子“关联”。 如果用户处于子“Associations”下,则userLogin方法不应登录该用户,否则应登录该用户。 但是,它不起作用,即使用户处于“关联”状态,也会登录 private void userLogin(){ 字符串email=editTextEmail.getText().toString().trim(); 字符串密码=editTextPassword.
private void userLogin(){
字符串email=editTextEmail.getText().toString().trim();
字符串密码=editTextPassword.getText().toString().trim();
mAuth.signInWithEmailAndPassword(电子邮件,密码)。addOnCompleteListener(新的OnCompleteListener(){
@凌驾
未完成的公共void(@NonNull任务){
progressBar.setVisibility(View.GONE);
if(task.issusccessful()){
FirebaseUser currentUser=FirebaseAuth.getInstance().getCurrentUser();
字符串RegisteredUserID=currentUser.getUid();
DatabaseReference jLoginDatabase=FirebaseDatabase.getInstance().getReference().child(“关联”).child(RegisteredUserID);
jLoginDatabase.addValueEventListener(新的ValueEventListener(){
@凌驾
公共void onDataChange(DataSnapshot DataSnapshot){
if(dataSnapshot.exists()){
Toast.makeText(getApplicationContext(),“您未注册”,Toast.LENGTH\u SHORT.show();
}
其他的
{
完成();
意向意向=新意向(signindor.this,homeportor.class);
intent.addFlags(intent.FLAG\u ACTIVITY\u CLEAR\u TOP);
星触觉(意向);
}
}
@凌驾
已取消的公共void(DatabaseError DatabaseError){
}});}
否则{
Toast.makeText(getApplicationContext(),task.getException().getMessage(),Toast.LENGTH_SHORT).show();
}
}
});
}
我没有尝试此操作,但它应该可以工作,首先,在您使用用户登录并进入任务内部后。isSuccessful
,您可以使用task.getResult().getUser().getUid()
检索当前登录的用户。然后在关联中循环并获取每个用户密钥(我假设关联中的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);
}
}
public void onComplete(@NonNull任务){
progressBar.setVisibility(View.GONE);
if(task.issusccessful()){
DatabaseReference jLoginDatabase=FirebaseDatabase.getInstance().getReference().child(“关联”);
jLoginDatabase.addListenerForSingleValueEvent(新的ValueEventListener()){
@凌驾
公共void onDataChange(DataSnapshot DataSnapshot){
对于(DataSnapshot快照:DataSnapshot.getChildren()){
if(snapshot.getKey().equals(task.getResult().getUser().getUid()){
Toast.makeText(getApplicationContext(),“您未注册”,Toast.LENGTH\u SHORT.show();
}
其他的
{
完成();
意向意向=新意向(signindor.this,homeportor.class);
intent.addFlags(intent.FLAG\u ACTIVITY\u CLEAR\u TOP);
星触觉(意向);
}
}
我使用了addListenerForSingleValueEvent
,因为我们只需要在引用处循环一次,而不需要一直监听数据
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);
}
}