【问题标题】:Firebase Authentication (email and password) How to check if user still exists?Firebase 身份验证(电子邮件和密码)如何检查用户是否仍然存在?
【发布时间】:2018-12-02 17:24:24
【问题描述】:

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

FirebaseUser currentUser = mAuth.getCurrentUser();

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

【问题讨论】:

  • 请添加您的数据库结构和您正在使用的代码。

标签: android firebase firebase-authentication


【解决方案1】:

尝试使用类似的东西:

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

      删除用户数据,使当前用户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.
                          }
                      }
                  });
      

      【讨论】:

        【解决方案4】:

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

        从 Firebase 控制台中删除身份验证用户不会撤销用户当前登录的设备上的身份验证令牌,因为令牌在本地缓存。使用 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
                            }
                        }
                    });
        

        【讨论】:

          猜你喜欢
          • 2017-02-22
          • 2023-01-23
          • 2016-02-11
          • 2021-11-21
          • 2018-01-25
          • 2019-03-15
          • 2016-11-13
          • 1970-01-01
          • 2018-01-11
          相关资源
          最近更新 更多