【问题标题】:Reauthenticate user x from an "admin user" to delete user x从“管理员用户”重新验证用户 x 以删除用户 x
【发布时间】:2023-03-25 14:56:01
【问题描述】:

在其他带有 removeUser 的 Firebase 版本中,我们只能使用电子邮件和密码删除用户。使用新的 Firebase 版本,如果您已与该用户连接,您似乎只能删除和用户......但是当我与管理员用户连接并且我试图删除另一个用户时,问题就来了。这是代码。

    final FirebaseUser user = mAuth.getCurrentUser();

 AuthCredential credential = EmailAuthProvider
  .getCredential(mail, postSnapshot.getValue(User.class).getPwdUser());

 user.reauthenticate(credential)
  .addOnCompleteListener(new OnCompleteListener < Void > () {
   @Override
   public void onComplete(@NonNull Task < Void > task) {

    user.delete().addOnCompleteListener(new OnCompleteListener < Void > () {
     @Override
     public void onComplete(@NonNull Task < Void > taskDeleted) {
      if (taskDeleted.isSuccessful()) {
       Toast.makeText(getApplicationContext(),
        "Deleted user!", Toast.LENGTH_LONG).show();
      }
     }
    });
   }
  });

但我无法获取删除方法,因为在重新验证时它会引发错误,并显示“提供的凭据与先前登录的用户不对应”。任何人都知道如何从其他用户重新进行身份验证?

【问题讨论】:

    标签: android firebase firebase-authentication


    【解决方案1】:

    Android 版 Firebase SDK 只能删除当前登录的用户。因此,如果您知道用户的电子邮件+密码,则必须以该用户身份登录才能删除该帐户。

    对于管理功能,您应该使用Firebase Admin SDK,您应该在受信任的后端服务器上运行它。身份验证功能目前仅在 Firebase Admin SDK for Node 中可用。

    【讨论】:

    • 最后的解决方案是从实际用户注销,在 signwitheamilAndPassword 之后,在用户和密码已知的情况下,删除已登录的用户并在使用管理员用户登录后。
    【解决方案2】:

    最后代码应该是这样的

     mAuth.signOut();
    mAuth.signInWithEmailAndPassword(email,password)
            .addOnCompleteListener(UserList.this, new OnCompleteListener<AuthResult>() {
                @Override
                public void onComplete(@NonNull Task<AuthResult> task) {
                    if (!task.isSuccessful()) {
                        mAuth= FirebaseAuth.getInstance(myFirebaseRef.getDatabase().getApp());
                        try{
    
                            mAuth.signInWithEmailAndPassword(getsPreferences().getString("mailUser",""), getsPreferences().getString("pwd",""))
                                    .addOnCompleteListener(UserList.this, new OnCompleteListener<AuthResult>() {
                                        @Override
                                        public void onComplete(@NonNull Task<AuthResult> task) {
    
                                        }});
                        }catch(Exception e){
    
                        }
                    }
                }});
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-30
      • 1970-01-01
      • 2010-11-26
      • 1970-01-01
      • 1970-01-01
      • 2018-12-04
      相关资源
      最近更新 更多