繁体   English   中英

Firebase电子邮件验证未更新状态

[英]Firebase email verification not updating status

我在我的应用程序中使用Firebase身份验证,用户可以在其中使用“电子邮件和密码”进行注册,而他必须验证电子邮件。

用户会收到验证邮件,但是当他验证邮件并返回到应用程序时,isEmailVerified()始终为false。 因此,尽管我已经验证了电子邮件,但我的应用仍然不允许用户使用所有功能。

但是,如果他们注销并再次登录,则isEmailVerified()立即返回true。 但是注销用户并重新登录不是很好。

public class Profile extends AppCompatActivity {

    FirebaseDatabase database;
    DatabaseReference myRef;
    TextView name;
    Button logout;
    FirebaseAuth auth;
    String userStatus;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_profile);

        auth = FirebaseAuth.getInstance();
        database = FirebaseDatabase.getInstance();
        myRef = database.getReference("name");

        name=findViewById(R.id.id_name);
        logout=findViewById(R.id.id_logout);

        logout.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                auth.signOut();

               startActivity(new Intent(Profile.this, Login.class));
            }
        });

  userStatus= String.valueOf(auth.getCurrentUser().isEmailVerified());

        if (userStatus =="true")

        {

            myRef.addValueEventListener(new ValueEventListener() {
                @Override
                public void onDataChange(DataSnapshot dataSnapshot) {

                    String value = dataSnapshot.getValue(String.class);
                    name.setText("Hello my name is: "+value);
                    Log.d("ashu", "Value is: " + value);
                }

                @Override
                public void onCancelled(DatabaseError error) {
                    // Failed to read value
                    Log.d("ashu", "Failed to read value.", error.toException());
                }
            });
        }

        else {
            Toast.makeText(Profile.this,"Verify your email ", Toast.LENGTH_SHORT).show();
            name.setText("Verify your email");

       }}}

这是我的一些逻辑后的答案

userStatus = String.valueOf(auth.getCurrentUser().isEmailVerified());

// user has not verified the email
Toast.makeText(Profile.this,"Verify your email ", Toast.LENGTH_SHORT).show();
name.setText("Verify your email");

auth.getCurrentUser().reload().addOnCompleteListener(new OnCompleteListener<Void>() {
                @Override
                public void onComplete(@NonNull Task<Void> task) {

                    if (userStatus =="true")

                    {
//if they have verified the email
                        myRef.addValueEventListener(new ValueEventListener() {
                            @Override
                            public void onDataChange(DataSnapshot dataSnapshot) {
                                // retrieving the value of current user

                                String value = dataSnapshot.getValue(String.class);
                                name.setText("Hello my name is: "+value);
                            }

                            @Override
                            public void onCancelled(DatabaseError error) {
                                // Failed to read value
                                Log.d("ashu", "Failed to read value.", error.toException());
                            }
                        });



                    }

                    else {

                        name.setText("Verify your mail");
                    }

                }
            });

        }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM