如何使用Firebase身份验证检查用户是否首次登录

时间:2016-09-19 03:25:59

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

我正在使用Firebase数据库和Firebase身份验证,允许用户使用电子邮件/密码或Google登录进行登录。在登录活动中,我正在尝试检查用户是否使用Google登录,是第一次执行此操作还是不执行此操作。

如果这是他第一次签名,则会出现一个对话框,并要求用户提供年龄和性别;如果不是,则不应出现对话框。

我遇到的问题是,如果用户使用Google登录,则始终会显示对话框,无论是否是第一次。

这是我的代码,我试图检查用户是否第一次登录:

   protected void updateActivity(FirebaseUser user) {
    Log.d(TAG ,"updateActivity(FirebaseUser) - Ini");

    final boolean[] exist = {false};

    if(user != null) {
        ArrayList<String> providers = (ArrayList<String>) user.getProviders();
       if(!providers.isEmpty() && providers.get(0).equals("google.com")) {
           username = user.getEmail().substring(0,user.getEmail().indexOf('@'));
           String userId = user.getUid();

           Query query = mRef.orderByChild("userName").equalTo(username);

           query.addValueEventListener(new ValueEventListener() {
               @Override
               public void onDataChange(DataSnapshot dataSnapshot) {
                   for(DataSnapshot userSnapShot :  dataSnapshot.getChildren()){

                       if (!userSnapShot.getKey().equals(null) && !userSnapShot.getKey().isEmpty()) {
                           exist[0] = true;
                           Intent i  =  new Intent(LoginActivity.this, HomeActivity.class);
                           startActivity(i);
                           finish();

                       }
                   }
               }

               @Override
               public void onCancelled(DatabaseError databaseError) {

               }
           });



       }

      if(providers.get(0).equals("password")) {
            Intent i  =  new Intent(LoginActivity.this, HomeActivity.class);
            startActivity(i);
            finish();
        }

        showDialog();

    }



    Log.d(TAG ,"updateActivity(FirebaseUser) - Fi");

}

showDialog方法:

  public void showDialog() {

    android.app.FragmentManager fm =  getFragmentManager();
     DialogBox myDialog =  new DialogBox();
     myDialog.show(fm,"MyDialog");
}

如你所见,我有一个布尔变量&#34;存在&#34;如果userSnapshot具有用户登录用户名之类的用户名,那么它应该是真的,在这种情况下,不应出现对话框。

如果&#34;存在&#34;如果值为false,则应出现对话框。

当用户第一次签名时我没有问题,我的问题是当用户已经登录时,他正在重新登录。

我不知道为什么

这段代码:

 query.addValueEventListener(new ValueEventListener() {
               @Override
               public void onDataChange(DataSnapshot dataSnapshot) {
                   for(DataSnapshot userSnapShot :  dataSnapshot.getChildren()){

                       if (!userSnapShot.getKey().equals(null) && !userSnapShot.getKey().isEmpty()) {
                           exist[0] = true;
                           Intent i  =  new Intent(LoginActivity.this, HomeActivity.class);
                           startActivity(i);
                           finish();

                       }
                   }
               }

               @Override
               public void onCancelled(DatabaseError databaseError) {

               }
           });



       }

执行两次,即使登录的用户之前已经登录过,并且他的用户名存在于数据库中,对话框显示1秒钟,然后启动另一个活动(HomeActivity)。 / p>

这是我在Firebase中的用户数据库:

enter image description here

所以,任何帮助都将非常感激。

0 个答案:

没有答案