在 kotlin 中实现状态持久性



我试图为我的 android 应用程序实现状态持久性,以便用户保持登录状态,但我无法理解文档,所以我跑到这里寻求帮助。

这是代码片段:

firebase.auth().setPersistence(firebase.auth.Auth.Persistence.SESSION)
  .then(function() {
    // Existing and future Auth states are now persisted in the current
    // session only. Closing the window would clear any existing state even
    // if a user forgets to sign out.
    // ...
    // New sign-in will be persisted with session persistence.
    return firebase.auth().signInWithEmailAndPassword(email, password);
  })
  .catch(function(error) {
    // Handle Errors here.
    var errorCode = error.code;
    var errorMessage = error.message;
  });

我已经尝试了很多东西,但我不太明白它们在哪里实例化firebase变量。

在文档中有这一行:

这将更改指定身份验证上的持久性类型 当前保存的身份验证会话的实例,并应用此类型的 未来登录请求的持久性

但是我仍然无法完全了解哪个身份验证实例,我正在使用FirebaseAuth UI。

这是我的一些代码:

    private fun showSignInOptions() {
        startActivityForResult(
            AuthUI.getInstance()
                .createSignInIntentBuilder()
                .setAvailableProviders(providers)
                .build(),
            RC_SIGN_IN
        )
    }
    // FirebaseUI Auth code.
    override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
        super.onActivityResult(requestCode, resultCode, data)
        if (requestCode == RC_SIGN_IN) {
            val response = IdpResponse.fromResultIntent(data)
            if (resultCode == Activity.RESULT_OK) {
                // Successfully signed in
                val user = FirebaseAuth.getInstance().currentUser
                Log.d("AUTH", "Sign in SUCCESSFUL. $user")
                // ...
            } else {
                Log.d("AUTH", "Sign in failed.")
                // Sign in failed. If response is null the user canceled the
                // sign-in flow using the back button. Otherwise check
                // response.getError().getErrorCode() and handle the error.
                // ...
            }
        }

    }

我在onCreate()打电话给showSignInOptions().

提前感谢您的帮助:D

如果我

正确理解您的问题,您希望让您的用户保持登录状态,而不是要求他们登录。如果是这种情况,您需要做的就是检查是否

FirebaseAuth.getInstance().currentUser

返回空值。如果它返回空值,您可以初始化FirebaseAuthUI以使其登录。因此,最终产品应类似于以下代码片段:

val mUser = FirebaseAuth.getInstance().currentUser
mUser?.let{
//do your stuff here
} ?: showSignInOptions()

最新更新