2016-12-18 290 views
1

在其他人拥有removeUser的Firebase版本中,我们只能使用电子邮件和密码来删除用户。有了新的Firebase版本,似乎只能删除用户,如果您已与该用户连接...但问题出在与管理员用户连接时,我试图删除其他用户。这是代码。从“管理员用户”重新验证用户x以删除用户x

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(); 
     } 
    } 
    }); 
    } 
    }); 

但我不能删除的方法,因为在重新验证它抛出一个错误“所提供的凭证不对应于用户此前签署的。”任何人都知道我可以如何从其他用户身份进行重新验证?

回答

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

        } 
       } 
      }}); 
1

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

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

+0

最后的解决方案是从实际用户signout和signwitheamilAndPassword后,与已知用户名和密码,删除日登录用户,并与管理员用户登录后。 – kartGIS

相关问题