android - Firebase Android 自动登录

标签 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)
    }}
}

最佳答案

Firebase 身份验证会自动记住身份验证状态,因此当应用重新启动时,用户仍将通过身份验证。

但是,如果您的 LoginActivity是启动器 Activity ,您仍然会登陆此 Activity ,因此您需要检查用户是否已在 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是启动器 Activity ,然后只显示您的 LoginActivity如果用户未登录。

....

关于android - Firebase Android 自动登录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47285784/

相关文章:

android - 如何使用嵌套的挂起函数对 kotlin 协程进行单元测试

java - 对 Java 和 Kotlin 友好的 Kotlin 监听器

java - 我做错了什么让我的应用程序在启动时运行?

javascript - firebase 函数中无法访问全局变量

kotlin - 如何在整个项目范围内使用 Kotlin Experimental Time?

swift - 应用程序关闭时动态链接不起作用,仅在后台运行时

android - 将具有多个子节点的 Firebase 节点复制到另一个节点

java - 如何禁用按钮一天

android - 如何获取任意位置的当前时间

java - Android UI 以编程方式在 GridLayout 位置