Firebase - 删除后用户仍然存在
Firebase - User still exist after delete
当我通过单击旁边的垃圾桶从实时数据库中删除用户时,用户消失了,没关系,但我仍然可以通过他的电子邮件和密码登录,登录成功后,UUID当我将一些值写入数据库中的子表时,该用户的 再次出现,但在注册时没有定义他的值。
我以为1小时后应该没问题,我还可以把他注册为新用户,但我不能。我前两天删了他。怎么了,我如何才能永久删除用户 - 而不是通过阻止他?
我的部分主要代码:
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
...
@Override
protected void onCreate(Bundle savedInstanceState) {
//textview,buttons,progress bars, etc...
mAuth = FirebaseAuth.getInstance();
forgotPassword = (TextView) findViewById(R.id.forgotPassword);
forgotPassword.setOnClickListener(this);
}
...
//Onclicks, textview value correctness etc...
progressBar.setVisibility(View.VISIBLE);
FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
mAuth.signInWithEmailAndPassword(email,password).addOnCompleteListener(new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
if(task.isSuccessful()){
FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
if(user.isEmailVerified()){
// redirect to user profile
progressBar.setVisibility(View.GONE);
startActivity(new Intent(MainActivity.this, ProfileDashboard.class));
}else {
progressBar.setVisibility(View.GONE);
user.sendEmailVerification();
Toast.makeText(MainActivity.this,"Check your email to verify your account!", Toast.LENGTH_LONG).show();
}
}else{
progressBar.setVisibility(View.GONE);
Toast.makeText(MainActivity.this, "Failed to login! Please check your credentials", Toast.LENGTH_LONG).show();
}
}
});
}
}
Realtime Database
与 Authentication
不同。
删除身份验证中的用户即可解决问题:
正如上面提到的评论,从数据库中删除与身份验证不同。
为此,您可以使用 firebase admin SDK。
你可以在这里看到一个例子:https://firebase.google.com/docs/auth/android/manage-users.
所以基本上你可以做的是从数据库中删除用户,然后从 Firebase Auth 中删除用户以避免出现此类问题;示例:
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.");
}
}
});
虽然@Dabbel 的解决方案表示将用户从控制台中移除,但确实可以解决问题,但请注意,在用户较多的情况下,此操作可能不可行。
因此,您拥有的最佳选择是通过调用 FirebaseUser#delete() 以编程方式从 Firebase Auth 中删除用户,其中:
Deletes the user record from your Firebase project's database.
当我通过单击旁边的垃圾桶从实时数据库中删除用户时,用户消失了,没关系,但我仍然可以通过他的电子邮件和密码登录,登录成功后,UUID当我将一些值写入数据库中的子表时,该用户的 再次出现,但在注册时没有定义他的值。
我以为1小时后应该没问题,我还可以把他注册为新用户,但我不能。我前两天删了他。怎么了,我如何才能永久删除用户 - 而不是通过阻止他?
我的部分主要代码:
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
...
@Override
protected void onCreate(Bundle savedInstanceState) {
//textview,buttons,progress bars, etc...
mAuth = FirebaseAuth.getInstance();
forgotPassword = (TextView) findViewById(R.id.forgotPassword);
forgotPassword.setOnClickListener(this);
}
...
//Onclicks, textview value correctness etc...
progressBar.setVisibility(View.VISIBLE);
FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
mAuth.signInWithEmailAndPassword(email,password).addOnCompleteListener(new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
if(task.isSuccessful()){
FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
if(user.isEmailVerified()){
// redirect to user profile
progressBar.setVisibility(View.GONE);
startActivity(new Intent(MainActivity.this, ProfileDashboard.class));
}else {
progressBar.setVisibility(View.GONE);
user.sendEmailVerification();
Toast.makeText(MainActivity.this,"Check your email to verify your account!", Toast.LENGTH_LONG).show();
}
}else{
progressBar.setVisibility(View.GONE);
Toast.makeText(MainActivity.this, "Failed to login! Please check your credentials", Toast.LENGTH_LONG).show();
}
}
});
}
}
Realtime Database
与 Authentication
不同。
删除身份验证中的用户即可解决问题:
正如上面提到的评论,从数据库中删除与身份验证不同。
为此,您可以使用 firebase admin SDK。 你可以在这里看到一个例子:https://firebase.google.com/docs/auth/android/manage-users.
所以基本上你可以做的是从数据库中删除用户,然后从 Firebase Auth 中删除用户以避免出现此类问题;示例:
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.");
}
}
});
虽然@Dabbel 的解决方案表示将用户从控制台中移除,但确实可以解决问题,但请注意,在用户较多的情况下,此操作可能不可行。
因此,您拥有的最佳选择是通过调用 FirebaseUser#delete() 以编程方式从 Firebase Auth 中删除用户,其中:
Deletes the user record from your Firebase project's database.