【问题标题】:How can we delete firebase user if he doesn't verify email?如果他不验证电子邮件,我们如何删除 firebase 用户?
【发布时间】:2020-10-21 17:43:29
【问题描述】:

我想从 firebase 身份验证中删除用户,如果用户在 1 小时内未验证电子邮件地址,我还想从实时数据库中删除数据。删除用户很容易,但如果在 1 小时内没有验证,那我该怎么做呢?问题是 firebase 的服务器较少。

【问题讨论】:

    标签: android firebase firebase-realtime-database firebase-authentication


    【解决方案1】:

    编写并部署一个 scheduled function 定期:

    1. 在您的数据库中查询尚未验证的用户(您需要一个孩子来记录)。
    2. 删除数据库记录和delete the user account

    这两个步骤都需要使用Firebase Admin SDK

    【讨论】:

      【解决方案2】:

      就是这么简单!只需创建未经验证的用户数据库的实时数据库。并且当用户注册的时候也会在数据库中注册。因此,当应用程序启动时,它会检查未经验证的用户,如果时间差大于 1 小时,则在此处编写 if-else 语句,该用户将被删除。

      就像我说的那样简单:)

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          猜你喜欢
          • 2017-05-23
          • 1970-01-01
          • 2019-12-23
          • 2017-02-23
          • 1970-01-01
          • 2019-10-15
          • 2017-12-13
          • 1970-01-01
          • 2020-08-02
          相关资源
          最近更新 更多