2017-03-03 166 views
4

我正在使用Firebase身份验证在Android中制作一个简单的身份验证应用程序。到目前为止,我成功地签署了该用户,但问题在于用户仍然登录,而且我找不到签出他的方式。如何让用户在Firebase中注销?

这里是我的MainActivity.java代码

public class MainActivity extends AppCompatActivity { 

    private FirebaseAuth mAuth; 
    private FirebaseAuth.AuthStateListener mAuthListener; 

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

     //tracking the sign in and singn out operations 
     mAuth = FirebaseAuth.getInstance(); 
     mAuthListener = new FirebaseAuth.AuthStateListener(){ 
      @Override 
      public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) { 
       FirebaseUser user = firebaseAuth.getCurrentUser(); 
       if (user!=null){ 
        System.out.println("User logged in"); 
       } 
       else{ 
        System.out.println("User not logged in"); 
       } 
      } 
     }; 
    } 


    public void onStart(){ 
     super.onStart(); 
     mAuth.addAuthStateListener(mAuthListener); 
    } 
    public void onStop(){ 
     super.onStop(); 
     if (mAuthListener != null) { 
      mAuth.removeAuthStateListener(mAuthListener); 

     } 
    } 


    public void buttonClicked(View view){ 

     EditText editemail = (EditText) findViewById(R.id.email); 
     EditText editpass = (EditText) findViewById(R.id.password); 

     String email = editemail.getText().toString(); 
     String password = editpass.getText().toString(); 


     mAuth.signInWithEmailAndPassword(email, password) 
       .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() { 
        @Override 
        public void onComplete(@NonNull Task<AuthResult> task) { 
        // Log.d(TAG, "signInWithEmail:onComplete:" + task.isSuccessful()); 
         Toast.makeText(MainActivity.this, "Authentication Success.", 
           Toast.LENGTH_SHORT).show(); 
         startActivity(new Intent(MainActivity.this,Success.class)); 
         // If sign in fails, display a message to the user. If sign in succeeds 
         // the auth state listener will be notified and logic to handle the 
         // signed in user can be handled in the listener. 
         if (!task.isSuccessful()) { 
          // Log.w(TAG, "signInWithEmail", task.getException()); 
          Toast.makeText(MainActivity.this, "Authentication failed.", 
            Toast.LENGTH_SHORT).show(); 
         } 

         // ... 
        } 
       }); 
    } 



} 
+1

我认为你需要调用“unauth()”从本地存储中立即删除该令牌,因为当你调用firebase身份验证时,它会将该特定用户的令牌保存在设备上的本地存储中。在最近的时间“signOut”占据了位置的“不道德”,它看起来像不赞成。 –

+0

感谢@AbuSufian,我放置了“FirebaseAuth.getInstance()。signOut();”在onStop方法,它的工作原理。 –

回答

12

使用此代码FirebaseAuth.getInstance().signOut();

+0

谢谢,它的工作,我把这个代码FirebaseAuth.getInstance()。signOut();“在我的onStop方法。希望这是正确的方式td做到这一点。 –

2

火力地堡权威性是提供signout方法。

FirebaseAuth.getInstance().signOut(); 
+0

谢谢,它的工作,我把这个代码FirebaseAuth.getInstance() 。登出();”在我的onStop方法中。希望这是正确的方式td这样做。 –

4

尝试这个

FirebaseAuth fAuth = FirebaseAuth.getInstance(); 
fAuth.signOut(); 
+3

除非你需要'fAuth'来代替别的东西,'FirebaseAuth.getInstance()。signOut();'工作得很好 –

5

你可以简单地调用这个

FirebaseAuth.getInstance().signOut(); 

如果要执行一些操作迹象出来之后再使用这一个。

public void onClick(View v) { 
    if (v.getId() == R.id.sign_out) { 
     AuthUI.getInstance() 
      .signOut(this) 
      .addOnCompleteListener(new OnCompleteListener<Void>() { 
       public void onComplete(@NonNull Task<Void> task) { 
        // user is now signed out 
        startActivity(new Intent(MyActivity.this, SignInActivity.class)); 
        finish(); 
       } 
      }); 
     } 
    } 
-3

试试这个它为我工作。

FirebaseAuth.getInstance() 
     .signOut(this) 
     .addOnCompleteListener(new OnCompleteListener<Void>() { 
      public void onComplete(@NonNull Task<Void> task) { 
       // user is now signed out 
       startActivity(new Intent(YOUR CURRENT ACTIVITY, ACTIVITY IN WHICH YOU WANT TO MOVE)); 
       finish(); 
      } 
     }); 
+0

#Khyati Fataniai不认为你曾经尝试过我在上面提到的代码。 否则你不会这样说。 我的自我试用这个在我的现场应用程序完全建立在firebase上。 –

+0

我试过你的代码,但它在signOut方法上显示错误 –

2

如果正在使用firebaseAuthUI然后推荐方法根据firebaseAuthUI github Guide

public void onClick(View v) { 
if (v.getId() == R.id.sign_out) { 
    AuthUI.getInstance() 
     .signOut(this) 
     .addOnCompleteListener(new OnCompleteListener<Void>() { 
      public void onComplete(@NonNull Task<Void> task) { 
       // user is now signed out 
       startActivity(new Intent(MyActivity.this, SignInActivity.class)); 
       finish(); 
      } 
     }); 
    } 
}