适用于:
外部租户(了解详细信息)
本教程演示如何使用本机身份验证在 Android 应用中注册后自动登录用户。
在本教程中,你将:
- 注册后登录。
- 处理错误。
先决条件
- 完成在示例本机 Android 移动应用程序中登录用户中的步骤。 这篇文章向您展示如何运行一个通过使用您的租户设置配置的 Android 示例。
- 教程:使用本机身份验证在 Android 移动应用中添加注册。 无论你是使用电子邮件和密码进行注册,还是通过电子邮件发送一次性密码注册,本教程中的步骤都应该有效。
注册后登录
注册流成功后,你可以自动登录用户,而无需启动新的登录流。
SignUpResult.Complete 返回 SignInContinuationState 对象。
SignInContinuationState 对象提供对 signIn(parameters) 方法的访问权限。
若要使用电子邮件和密码注册用户,然后将其自动登录,请使用以下代码片段:
CoroutineScope(Dispatchers.Main).launch {
val parameters = NativeAuthSignUpParameters(username = email)
parameters.password = password
val actionResult: SignUpResult = authClient.signUp(parameters)
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 parameters = NativeAuthSignInContinuationParameters()
val signInActionResult = signInContinuationState.signIn(parameters)
if (signInActionResult is SignInResult.Complete) {
// Handle sign in success
val accountState = signInActionResult.resultValue
val getAccessTokenParameters = NativeAuthGetAccessTokenParameters()
val accessTokenResult = accountState.getAccessToken(getAccessTokenParameters)
if (accessTokenResult is GetAccessTokenResult.Complete) {
val accessToken = accessTokenResult.resultValue.accessToken
val idToken = accountState.getIdToken()
}
}
}
}
}
若要在登录后检索 ID 令牌声明,请使用读取 ID 令牌声明中的步骤。
处理登录错误
成功登录后,SignInContinuationState.signIn(parameters) 方法会返回 SignInResult.Complete。 它还可能返回错误。
若要处理 SignInContinuationState.signIn(parameters) 中的错误,请使用以下代码片段:
val parameters = NativeAuthSignInContinuationParameters()
val signInActionResult = signInContinuationState.signIn(parameters)
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 getAccessTokenParameters = NativeAuthGetAccessTokenParameters()
val accessTokenResult = accountState.getAccessToken(getAccessTokenParameters)
if (accessTokenResult is GetAccessTokenResult.Complete) {
val accessToken = accessTokenResult.resultValue.accessToken
val idToken = accountState.getIdToken()
}
}
}