我在我的应用中使用Firebase身份验证(电子邮件和密码身份验证)。
在我的登录活动的onStart()
方法中,我使用以下方法检索当前用户:
FirebaseUser currentUser = mAuth.getCurrentUser();
问题是当从数据库中删除用户时,mAuth.getCurrentUser()
方法仍会检索用户并允许身份验证。
如何检查用户是否仍然存在?
谢谢!
答案 0 :(得分:0)
尝试使用类似这样的内容:
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
答案 1 :(得分:0)
您可以使用getInstance。这对我来说很好。您没有使用它的实例。
private boolean isSignedIn() {
return FirebaseAuth.getInstance().getCurrentUser() != null;
}
答案 2 :(得分:0)
删除用户数据,并将当前用户设置为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.
}
}
});
答案 3 :(得分:0)
以下代码可在android上很好地工作,以确认Firebase Auth用户是否仍然存在(尚未删除或禁用)并且具有有效的凭据。
从Firebase控制台删除Auth用户不会撤消该用户当前登录的设备上的auth令牌,因为该令牌是本地缓存的。使用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
}
}
});