共用方式為


教學課程:在 Android 應用程式中註冊後自動登入使用者

本教學課程將說明如何使用原生驗證,在 Android 應用程式中進行註冊,並自動登入使用者。

在本教學課程中,您會了解如何:

  • 註冊之後登入。
  • 處理錯誤。

必要條件

註冊之後登入

註冊流程成功後,您無須起始新的登入流程,即可自動登入使用者。

SignUpResult.Complete 會傳回 SignInContinuationState 物件。 SignInContinuationState 物件會提供對 signIn() 方法的存取權。

若要利用電子郵件與密碼註冊使用者,並自動登入,請使用下列程式碼片段:

CoroutineScope(Dispatchers.Main).launch { 
    val signUpActionResult = authClient.signUp( 
        username = emailAddress, 
        password = password 
    ) 
    if (SignUpActionResult is SignUpResult.CodeRequired) { 
        val nextState = signUpActionResult.nextState 
        val submitCodeActionResult = nextState.submitCode( 
            code = code 
        ) 
        if (submitCodeActionResult is SignUpResult.Complete) { 
            // Handle sign up success 
            val signInContinuationState = actionResult.nextState 
            val signInActionResult = signInContinuationState.signIn() 
            if (signInActionResult is SignInResult.Complete) { 
                // Handle sign in success
                val accountState = signInActionResult.resultValue
                val accessTokenResult = accountState.getAccessToken()
                if (accessTokenResult is GetAccessTokenResult.Complete) {
                    val accessToken = accessTokenResult.resultValue.accessToken
                    val idToken = accountState.getIdToken()
                }
            } 
        } 
    } 
}

若要在登入後擷取識別碼權杖宣告,請使用讀取識別碼權杖宣告中的步驟。

處理登入錯誤

成功登入後,SignInContinuationState.signIn() 方法會傳回 SignInResult.Complete, 也可以傳回錯誤。

若要利用 SignInContinuationState.signIn() 處理錯誤,請使用下列程式碼片段:

val signInContinuationState = actionResult.nextState 
val signInActionResult = signInContinuationState.signIn() 

when (signInActionResult) {
    is SignInResult.Complete -> {
        // Handle sign in success
         displayAccount(accountState = actionResult.resultValue)
    }
    is SignInContinuationError -> {
        // Handle unexpected error
    }
    else -> {
        // Handle unexpected error
    }
}

private fun displayAccount(accountState: AccountState) {
    CoroutineScope(Dispatchers.Main).launch {
        val accessTokenResult = accountState.getAccessToken()
        if (accessTokenResult is GetAccessTokenResult.Complete) {
            val accessToken = accessTokenResult.resultValue.accessToken
            val idToken = accountState.getIdToken()
        }
    }
}

下一步