Firebase身份验证(电子邮件和密码)如何检查用户是否仍然存在?

时间:2018-12-02 17:24:25

标签: android firebase firebase-authentication

我在我的应用中使用Firebase身份验证(电子邮件和密码身份验证)。 在我的登录活动的onStart()方法中,我使用以下方法检索当前用户:

FirebaseUser currentUser = mAuth.getCurrentUser();

问题是当从数据库中删除用户时,mAuth.getCurrentUser()方法仍会检索用户并允许身份验证。 如何检查用户是否仍然存在? 谢谢!

4 个答案:

答案 0 :(得分:0)

尝试使用类似这样的内容:

DatabaseReference ref = FirebaseDatabase.getInstance().getReference();
ref.child("users").child("email").addListenerForSingleValueEvent(new 
ValueEventListener() {
  @Override
  public void onDataChange(DataSnapshot dataSnapshot) {
      if(dataSnapshot.exists()){
          // used "email" already exists and is not deleted
      } else {
          // User does not exist. Add here your logic if the user doesn't exist
      }                               
  }

  @Override
  public void onCancelled(DatabaseError databaseError) {

  }
});

或检查以下一些SO问题和答案:

Firebase authentication for checking if the user exists in the database or not

Firebase Auth - with Email and Password - Check user already registered

答案 1 :(得分:0)

您可以使用getInstance。这对我来说很好。您没有使用它的实例。

private boolean isSignedIn() {
        return FirebaseAuth.getInstance().getCurrentUser() != null;
    }

答案 2 :(得分:0)

删除用户数据,并将当前用户设置为null: 请遵循以下代码。

     final FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();


           user.delete()
            .addOnCompleteListener(new OnCompleteListener<Void>() {
                @Override
                public void onComplete(@NonNull Task<Void> task) {
                    if (task.isSuccessful()) {
                        Log.d(TAG, "User account deleted.");
                        //Remove the information f the user from database.
                    }
                }
            });

答案 3 :(得分:0)

以下代码可在android上很好地工作,以确认Firebase Auth用户是否仍然存在(尚未删除或禁用)并且具有有效的凭据。

从Firebase控制台删除Auth用户不会撤消该用户当前登录的设备上的auth令牌,因为该令牌是本地缓存的。使用reload()会强制检查Firebase身份验证服务器。

currentUser.reload().addOnCompleteListener(new OnCompleteListener<Void>() {
                @Override
                public void onComplete(@NonNull Task<Void> task) {
                    if(task.isSuccessful()){
                        //User still exists and credentials are valid

                    }else {
                        //User has been disabled, deleted or login credentials are no longer valid, 
                        //so send them to Login screen
                    }
                }
            });