首页 文章

Firebase Android自动登录

提问于
浏览
1

所以我设置了电子邮件/密码注册和登录 .

那很有效 . 我以为Firebase会照顾这个,但显然不是 . 在用户关闭应用程序后,我想在下次打开应用程序时登录 .

缺什么?

class LoginActivity : AppCompatActivity(){
    lateinit var auth: FirebaseAuth
    lateinit var user: FirebaseAuth

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_login)

        auth = FirebaseAuth.getInstance()
    }

    fun loginLoginClicked(view: View) {
        // Perform login

        val email = loginEmailTxt.text.toString()
        val password = loginPasswordTxt.text.toString()

        auth.signInWithEmailAndPassword(email, password)
                .addOnSuccessListener {
                    finish()
                }
                .addOnFailureListener { exception ->
                    Log.e("Exception", "Could not sign in user - ${exception.localizedMessage}")
                }
        val loginIntent = Intent(this, MainActivity::class.java)
        startActivity(loginIntent)
    }

    fun loginCreateClicked(view: View) {
        // segue to the create user activity

        val createIntent = Intent(this, SignUpActivity::class.java)
        startActivity(createIntent)
    }}
}

1 回答

  • 3

    Firebase身份验证会自动记住身份验证状态,因此在重新启动应用程序时仍会对用户进行身份验证 .

    但是,如果 LoginActivity 是启动器活动,则需要检查用户是否在 onCreate() 中进行了身份验证,然后将其重定向到 MainActivity (如果他们已经登录),例如:

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_login)
    
        auth = FirebaseAuth.getInstance()
    
        if (auth.getCurrentUser() != null) {
            // User is signed in (getCurrentUser() will be null if not signed in)
            val intent = Intent(this, MainActivity::class.java)
            startActivity(intent)
            finish()
        }
    }
    

    这将使用FirebaseAuth#getCurrentUser()方法,如果用户已登录,将返回FirebaseUser对象,如果未登录,则返回 null .

    或者,您可以交换它,以便 MainActivity 是启动器活动,然后仅在用户未登录时显示您的 LoginActivity .

相关问题