从“管理员用户”重新验证用户x以删除用户x

时间:2016-12-18 23:24:19

标签: android firebase firebase-authentication

在其他带有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();
      }
     }
    });
   }
  });

但是我无法获得删除方法,因为在重新验证时它会抛出错误,“提供的凭据与先前登录的用户不对应”。任何人都知道如何从其他用户重新认证?

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

最后代码应该是这样的

 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){

                    }
                }
            }});