【问题标题】:Firebase sign out after few tries几次尝试后 Firebase 退出
【发布时间】:2016-10-19 23:48:18
【问题描述】:

我正在使用 Firebase,并在 onBackPressed() 中添加了 signOut() 方法以返回登录活动。 但是当我按“返回”退出登录时,我会返回登录活动,onAuthStateChanged在登录后将我带回下一个活动。 不知怎的,我仍然登录。

当我按下后退按钮第二次或第三次后它会起作用。 真的很奇怪,希望你能帮帮我。。 这是我的代码的一些 sn-ps:

这是登录后活动中的onBackPressed()

@Override
public void onBackPressed() {
    DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
    if (drawer.isDrawerOpen(GravityCompat.START)) {
        drawer.closeDrawer(GravityCompat.START);
    } else {
        super.onBackPressed();

         FirebaseAuth.getInstance().signOut();
         finish();

    }
}

这是登录活动中的AuthStateListener()

  mAuthListener = new FirebaseAuth.AuthStateListener() {
        @Override
        public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {
            FirebaseUser user = firebaseAuth.getCurrentUser();
            if (user != null) {
                curr_user = user;

                Toast.makeText(LoginActivity.this, "yes", Toast.LENGTH_SHORT).show();
                if(curr_user.getDisplayName() == null)
                    autoSignIn("email");
                else
                    autoSignIn("google");

            user.getUid());
            } else {
                Toast.makeText(LoginActivity.this, "out", Toast.LENGTH_SHORT).show();                 
            }           
        }
    };

这是启动下一个活动的autoSignIn() 方法:

public void autoSignIn(String accType) {

    if(accType.equals("email")) {

        mDatabaseReference.child("users").orderByKey().equalTo(curr_user.getUid());

        Query myTopPostsQuery = mDatabaseReference.child("users").orderByKey().equalTo(curr_user.getUid());
        myTopPostsQuery.addListenerForSingleValueEvent(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                for (DataSnapshot snapshot : dataSnapshot.getChildren()) {

                                    editor = pref.edit();
                                    User user = snapshot.getValue(User.class);
                                    editor.putString("DisplayName", user.username);
                                    editor.commit();
                                    intent = new Intent(getApplicationContext(), MainActivity.class);
                                    intent.putExtra("userID", curr_user.getUid());
                                    startActivity(intent);
                }

            }

            @Override
            public void onCancelled(DatabaseError databaseError) {

            }
        });
    }
    else {
        Toast.makeText(this,"google", Toast.LENGTH_SHORT).show();

        txtWelcome.setText("Hello " + curr_user.getDisplayName());
        intent = new Intent(getApplicationContext(), MainActivity.class);
        intent.putExtra("userID", curr_user.getUid());
        editor = pref.edit();
        editor.putString("DisplayName", curr_user.getDisplayName());
        editor.commit();
        startActivity(intent);

    }
}

【问题讨论】:

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


    【解决方案1】:

    最终想通了, 在FirebaseAuth.getInstance().signOut();finish()之后不知何故,它在user != null时运行onAuthStateChanged内的代码。 我删除了对方法 autoSignIn() 的调用,它起作用了。

    【讨论】:

      【解决方案2】:

      退出后调用 super.onBackPressed()。

      @Override
      public void onBackPressed() {
          DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
          if (drawer.isDrawerOpen(GravityCompat.START)) {
              drawer.closeDrawer(GravityCompat.START);
          } else {
              FirebaseAuth.getInstance().signOut();
              super.onBackPressed();
              finish();
          }
      }
      

      【讨论】:

      • 没有改变任何东西
      猜你喜欢
      • 2019-06-19
      • 2016-07-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-26
      • 2020-04-02
      • 2018-07-28
      • 2013-06-01
      相关资源
      最近更新 更多