Firebase Android自动登录

时间:2017-11-14 12:21:59

标签: android firebase kotlin firebase-authentication

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

这很有效。我以为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)
    }}
}

2 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:0)

如果有人为了使用Java实现相同目的而登陆这里,请使用以下代码

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

    auth = FirebaseAuth.getInstance();

    if (auth.getCurrentUser() != null) {
        // User is signed in (getCurrentUser() will be null if not signed in)
        Intent intent = Intent(this, MainActivity::class.java);
        startActivity(intent);
        finish();
        // or do some other stuff that you want to do
    }