Firebase:如何检查用户是否已登录?

时间:2017-06-16 07:54:09

标签: android firebase firebase-authentication

Android Firebase的新蜜蜂;我正在尝试Firebase身份验证,我正在尝试检查用户是否已登录以执行此操作我正在使用此简单代码:

null != mAuth.getCurrentUser();

这会返回true虽然我没有登录,但是我启用了匿名登录,我认为这可能是问题,但是当我检查时 mAuth.getCurrentUser().isAnonymous()我得到false

在IDE上检查mAuth.getCurrentUser()会显示:enter image description here

此处有任何指示。

7 个答案:

答案 0 :(得分:15)

我认为它的作用如下:

FirebaseAuth.getInstance().getCurrentUser()

如果用户未登录,则应返回null

答案 1 :(得分:12)

我遇到过类似的问题,退出Firebase是不够的 - 它会再次自动登录。

使用GoogleSignInApi注销也是必要的:

<script type="text/javascript">
$(document).ready(function(){
    $(".deley").hide();
    // if sound is currently playing, stop it and reset
    if(!$("#epicSound").paused) {
        $("#epicSound").pause();
        $("#epicSound").currentTime = 0;
    }
    setTimeout(function () {
        $(".deley").show();
        $("#epicSound").play();            
    }, 5000);
});
</script>
<div class="deley">TEXT</div>
<audio id="epicSound">
  <source src="epicSound.ogg" type="audio/ogg">
  <source src="epicSound.mp3" type="audio/mpeg">
</audio>

答案 2 :(得分:3)

检查用户是否已登录:

 private FirebaseAuth firebaseAuth;
 FirebaseAuth.AuthStateListener mAuthListener;

然后在你的onCreate:

     firebaseAuth = FirebaseAuth.getInstance();

      mAuthListener = new FirebaseAuth.AuthStateListener(){
                @Override
                public  void  onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth){
            FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
        if(user!=null){
        Intent intent = new Intent(LoginActivity.this, MainActivity.class);
        startActivity(intent);
        finish();
}
                }


            };

这可以在身份验证状态类或接口中创建。然后您可以简单地调用身份验证状态或检查您想要检查的任何活动:

在活动运行时检查身份验证状态:

 @Override
    protected void onStart() {
        super.onStart();
        firebaseAuth.addAuthStateListener(mAuthListener);
    }


    @Override
    protected void onResume() {
        super.onResume();
        firebaseAuth.addAuthStateListener(mAuthListener);
        }




    @Override
    protected void onStop() {
        super.onStop();
        firebaseAuth.removeAuthStateListener(mAuthListener);
    }

现在关于你的登录:设置你的布尔值后检查用户是否登录状态:(默认布尔设置为false)

firebaseAuth.signInWithEmailAndPassword(email, password).addOnCompleteListener(LoginActivity.this, new OnCompleteListener<AuthResult>() {
                        @Override
                        public void onComplete(@NonNull Task<AuthResult> task) {
                            progressBar.setVisibility(View.GONE);
                            if (!task.isSuccessful()) {
//set a your boolean to false
current_user_db.setValue(false);

如果用户成功登录,请将其设置为true,然后设置您的意图:

else {


String userid = firebaseAuth.getCurrentUser().getUid();
                            DatabaseReference current_user_db = FirebaseDatabase.getInstance().getReference("Users").child(userid);
                            current_user_db.setValue(true);
                            Intent intent = new Intent(LoginActivity.this, MainActivity.class);
                            startActivity(intent);
                            finish();

                        }

如果用户登录,您的节点将设置为False,如果用户未成功登录,则将其设置为false。

答案 3 :(得分:0)

科林版本

如果您使用Kotlin,请执行以下操作:

//properties
var firebaseAuth: FirebaseAuth? = null
var mAuthListener: FirebaseAuth.AuthStateListener? = null    
//in onCreate function
firebaseAuth = FirebaseAuth.getInstance()
    mAuthListener = FirebaseAuth.AuthStateListener() {
        fun onAuthStateChanged(@NonNull firebaseAuth:FirebaseAuth) {
            val user = FirebaseAuth.getInstance().getCurrentUser()
            if (user != null)
            {
                val intent = Intent(this@LoginActivity, MainActivity::class.java)
                startActivity(intent)
                finish()
            }
        }
    }

答案 4 :(得分:0)

This is how to do it in Kotlin with a some animation before routing to te next screen:
    private var mAuth: FirebaseAuth? = null
    private var user: FirebaseUser? = null
    private var mAuthListner: FirebaseAuth.AuthStateListener? = null

    mAuth = FirebaseAuth.getInstance()
            mAuthListner = FirebaseAuth.AuthStateListener {
                    firebaseAuth: FirebaseAuth ->
                user = firebaseAuth.currentUser
                if(user != null){
                    //Go to dashboard
                    splash_logo.alpha = 0f
                    splash_logo.animate().setDuration(3000).alpha(1f).withEndAction {
                        val intent = Intent(this, HomeActivity::class.java)
                        startActivity(intent)
                        overridePendingTransition(android.R.anim.slide_in_left, android.R.anim.slide_out_right)
                        finish()
                    }
                }else{
                    splash_logo.alpha = 0f
                    splash_logo.animate().setDuration(3000).alpha(1f).withEndAction {
                        val intent = Intent(this, MainActivity::class.java)
                        startActivity(intent)
                        overridePendingTransition(android.R.anim.slide_in_left, android.R.anim.slide_out_right)
                        finish()
                    }
                }
            }

答案 5 :(得分:0)

只需在您的代码中添加以下内容:

FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
        if (user != null) {
             //User is Logged in
        }else{
             //No User is Logged in
        }

答案 6 :(得分:0)

if (FirebaseAuth.getInstance().getCurrentUser()==null){
// user loged in already
 }else{
                Toast.makeText(this, "Please Login First", Toast.LENGTH_LONG).show();
            }
相关问题