【发布时间】:2020-10-21 17:43:29
【问题描述】:
我想从 firebase 身份验证中删除用户,如果用户在 1 小时内未验证电子邮件地址,我还想从实时数据库中删除数据。删除用户很容易,但如果在 1 小时内没有验证,那我该怎么做呢?问题是 firebase 的服务器较少。
【问题讨论】:
标签: android firebase firebase-realtime-database firebase-authentication
我想从 firebase 身份验证中删除用户,如果用户在 1 小时内未验证电子邮件地址,我还想从实时数据库中删除数据。删除用户很容易,但如果在 1 小时内没有验证,那我该怎么做呢?问题是 firebase 的服务器较少。
【问题讨论】:
标签: android firebase firebase-realtime-database firebase-authentication
编写并部署一个 scheduled function 定期:
这两个步骤都需要使用Firebase Admin SDK。
【讨论】:
就是这么简单!只需创建未经验证的用户数据库的实时数据库。并且当用户注册的时候也会在数据库中注册。因此,当应用程序启动时,它会检查未经验证的用户,如果时间差大于 1 小时,则在此处编写 if-else 语句,该用户将被删除。
就像我说的那样简单:)
【讨论】:
在signInWithEmailAndPassword 函数内运行firebaseAuth.getCurrentUser().isEmailVerified() 函数以查看用户是否通过验证。如果用户被验证,则只创建用户数据库,否则会给出异常并破坏功能,它不会保存未经验证的用户数据。
firebaseAuth.signInWithEmailAndPassword(Email,Pass).addOnCompleteListener(new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
if (task.isSuccessful()){
if (firebaseAuth.getCurrentUser().isEmailVerified()){
FirebaseUser user = firebaseAuth.getCurrentUser();
Uid = user.getUid();
databaseReference = FirebaseDatabase.getInstance().getReference().child("Users");
databaseReference.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot snapshot) {
if (!snapshot.hasChild(Uid)){
databaseReference = FirebaseDatabase.getInstance().getReference().child("Users").child(Uid);
HashMap<String,String> userMap = new HashMap<>();
userMap.put("Name","default");
userMap.put("email",Email);
databaseReference.setValue(userMap).addOnCompleteListener(new OnCompleteListener<Void>() {
//call your function here when user sign in first time after email verification
}
});
}
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
}
});
//call your function when user already registered and verified
//and already saved his information to database
}else{
//show your exception here
}
}else{
//show your exception here
}
}
});
【讨论】: