Tutorial: Incorporar registro en una aplicación móvil Android mediante la autenticación nativa
En este tutorial se muestra cómo registrar un usuario mediante el código de acceso de un solo uso de correo electrónico o el nombre de usuario (correo electrónico) y la contraseña, y cómo recopilar los atributos del usuario en la aplicación móvil Android mediante la autenticación nativa.
En este tutorial, aprenderá a:
- Registre un usuario mediante el código de acceso de un solo uso de correo electrónico o el nombre de usuario (correo electrónico) y la contraseña.
- Recopilación de atributos de usuario durante el registro.
- Control de errores de registro.
Requisitos previos
- Complete los pasos descritos en el artículo Tutorial: Preparación de la aplicación Android para la autenticación nativa.
- Si desea recopilar atributos de usuario durante el registro, configure los atributos de usuario al crear el flujo de usuario de registro e inicio de sesión.
Registro de un usuario
Para registrar un usuario mediante el código de acceso de un solo uso de correo electrónico o el nombre de usuario (correo electrónico) y la contraseña, recopile un correo electrónico del usuario y envíe un correo electrónico que contenga un código de acceso de un solo uso al usuario. El usuario escribe un código de acceso de un solo uso de correo electrónico válido para validar su nombre de usuario.
Para registrar un usuario, debe hacer lo siguiente:
Cree una interfaz de usuario (UI) para:
- Recopilar un correo electrónico del usuario. Agregar validación a las entradas para asegurarse de que el usuario escribe una dirección de correo electrónico válida.
- Recopilar una contraseña si se registra con el nombre de usuario (correo electrónico) y la contraseña.
- Recopilar un código de acceso de un solo uso de correo electrónico del usuario.
- Si es necesario, recopile atributos de usuario.
- Vuelva a enviar el código de acceso de un solo uso (recomendado).
- Inicie el flujo de registro.
En la aplicación, agregue un botón, cuyo evento de selección desencadene el siguiente fragmento de código:
CoroutineScope(Dispatchers.Main).launch { val actionResult = authClient.signUp( username = emailAddress //password = password, Pass 'password' param if you sign up with username (email) and password ) if (actionResult is SignUpResult.CodeRequired) { val nextState = actionResult.nextState val submitCodeActionResult = nextState.submitCode( code = code ) if (submitCodeActionResult is SignUpResult.Complete) { // Handle sign up success } } }
- Use el método de instancia del SDK,
signUp(username)
para iniciar el flujo de registro.- Para registrarse con el nombre de usuario (dirección de correo electrónico) y la contraseña, pase el parámetro de contraseña a la función
signUp
,signUp(username, password)
.
- Para registrarse con el nombre de usuario (dirección de correo electrónico) y la contraseña, pase el parámetro de contraseña a la función
- El parámetro del método,
username
, es la dirección de correo electrónico que recopila del usuario. - En el escenario más común, el
signUp(username)
osignUp(username, password)
devuelve un resultado,SignUpResult.CodeRequired
, que indica que el SDK espera que la aplicación envíe el código de acceso de un solo uso de correo electrónico enviado a la dirección de correo electrónico del usuario. - El objeto
SignUpResult.CodeRequired
contiene una nueva referencia de estado, que podemos recuperar a través deactionResult.nextState
. - El nuevo estado nos proporciona acceso a dos nuevos métodos:
submitCode()
envía el código de acceso de un solo uso de correo electrónico que recopila la aplicación del usuario.resendCode()
vuelve a enviar el código de acceso de un solo uso por correo electrónico si el usuario no recibe el código.
- El
submitCode()
devuelveSignUpResult.Complete
, que indica que el flujo está completo y que el usuario se ha registrado. - El
signUp(username)
osignUp(username, password)
también pueden devolverSignUpError
para indicar que se ha producido un error.
- Use el método de instancia del SDK,
Recopilación de atributos de usuario durante el registro
Tanto si se registra un usuario mediante el código de acceso de un solo uso de correo electrónico o un nombre de usuario (correo electrónico) y una contraseña, puede recopilar atributos de usuario antes de crear la cuenta de un usuario:
El método
signUp()
acepta un parámetroattributes
, comosignUp(username, attributes)
:CoroutineScope(Dispatchers.Main).launch { val actionResult = authClient.signUp( username = emailAddress, attributes = userAttributes //password = password, Pass 'password' param if you sign up with username (email) and password ) //... }
El Android SDK proporciona una clase de utilidad
UserAttribute.Builder
que se usa para crear atributos de usuario. Por ejemplo, para enviar atributos de usuario de ciudad y país, use el siguiente fragmento de código para compilar la variableuserAttributes
:val userAttributes = UserAttributes.Builder () .country(country) .city(city) .build()
Los nombres de método de la clase
UserAttribute.Builder
son los mismos que los nombres programables de los atributos de usuario que compilan. Obtenga más información sobre generador de atributos de Android SDK.Los métodos
signUp(username, attributes)
osignUp(username, attributes, password)
también pueden devolverSignUpResult.AttributesRequired
para indicar que la aplicación debe enviar uno o varios atributos necesarios antes de que Microsoft Entra cree una cuenta. El administrador configura estos atributos como obligatorios en el Centro de administración Microsoft Entra. Microsoft Entra no solicita explícitamente atributos de usuario opcionales.El resultado del
SignUpResult.AttributesRequired
contiene un parámetrorequiredAttributes
.requiredAttributes
es una lista de objetosRequiredUserAttribute
que contiene detalles sobre los atributos de usuario que la aplicación debe enviar. Para controlaractionResult is SignUpResult.AttributesRequired
, use el siguiente fragmento de código:val actionResult = authClient.signUp( username = email, attributes = attributes //password = password, Pass 'password' param if you sign up with username (email) and password ) if (actionResult is SignUpResult.AttributesRequired) { val requiredAttributes = actionResult.requiredAttributes // Handle "attributes required" result val nextState = actionResult.nextState nextState.submitAttributes( attributes = moreAttributes ) }
Control de errores de registro
Durante el registro, no todas las acciones se realizan correctamente. Por ejemplo, el usuario podría intentar registrarse con una dirección de correo electrónico ya usada o enviar un código de acceso de un solo uso de correo electrónico no válido.
Control del error de inicio de registro
Para controlar los errores del método signUp()
, use el siguiente fragmento de código:
val actionResult = authClient.signUp(
username = email
)
if (actionResult is SignUpResult.CodeRequired) {
// Next step: submit code
} else if (actionResult is SignUpError) {
when {
actionResult.isUserAlreadyExists() -> {
// Handle "user already exists" error
}
else -> {
// Handle other errors
}
}
}
signUp(username, attributes)
osignUp(username, password, attributes)
pueden devolverSignUpError
.SignUpError
indica un resultado de acción incorrecto devuelto porsignUp()
y no incluirá una referencia al nuevo estado.En el caso de
actionResult is SignUpError
, el SDK de MSAL para Android proporciona métodos de utilidad para permitirle analizar aún más los errores específicos:- El método
isUserAlreadyExists()
comprueba si el nombre de usuario ya se ha usado para crear una cuenta. isInvalidAttributes()
comprueba si uno o varios atributos que la aplicación envió no han podido validarse, por ejemplo, si el tipo de datos es incorrecto. Contiene un parámetroinvalidAttributes
, que es una lista de todos los atributos que enviaron las aplicaciones, pero que no se pudieron validar.isInvalidPassword()
compruebe que la contraseña no es válida, como cuando la contraseña no cumple todos los requisitos de complejidad de contraseña. Obtenga más información sobre las directivas de contraseña de Microsoft EntraisInvalidUsername()
compruebe que el nombre de usuario no es válido, como cuando el correo electrónico del usuario no es válido.isBrowserRequired()
comprueba la necesidad de un explorador (reserva web) para completar el flujo de autenticación. Este escenario se produce cuando la autenticación nativa no es suficiente para completar el flujo de autenticación. Por ejemplo, un administrador configura el correo electrónico y la contraseña como método de autenticación, pero la aplicación no puede enviar password como un tipo de desafío o simplemente no lo admite. Siga los pasos descritos en Compatibilidad con la reserva web en la aplicación Android para controlar el escenario en el que se produce.isAuthNotSupported()
comprueba si la aplicación envía un tipo de desafío que Microsoft Entra no admite, es decir, un valor de tipo de desafío distinto de oob o password. Obtenga más información sobre los tipos de desafío.
Notifique al usuario que el correo electrónico ya está en uso o que algunos atributos no son válidos mediante un mensaje descriptivo en la interfaz de usuario de la aplicación.
- El método
Para controlar el error de atributos no válidos, use el siguiente fragmento de código:
val actionResult = authClient.signUp( username = email, attributes = attributes //password = password, Pass 'password' param if you sign up with username (email) and password ) if (actionResult is SignUpError && actionResult.isInvalidAttributes()) { val invalidAttributes = actionResult.invalidAttributes // Handle "invalid attributes" error, this time submit valid attributes authClient.signUp( username = emailAddress, attributes = resubmittedAttributes //password = password, Pass 'password' param if you sign up with username (email) and password ) } //...
Control del error de código de acceso de un solo uso de envío de correo electrónico
Para controlar los errores del método submitCode()
, use el siguiente fragmento de código:
val submitCodeActionResult = nextState.submitCode(
code = code
)
if (submitCodeActionResult is SignUpResult.Complete) {
// Sign up flow complete, handle success state.
} else if (submitCodeActionResult is SubmitCodeError) {
// Handle errors under SubmitCodeError
when {
submitCodeActionResult.isInvalidCode() -> {
// Handle "code invalid" error
}
else -> {
// Handle other errors
}
}
}
submitCode()
puede devolverSubmitCodeError
.Use el método
isInvalidCode()
para comprobar si hay un error específico, por ejemplo, el código enviado no es válido. En este caso, se debe usar la referencia de estado anterior para volver a ejecutar la acción.Para recuperar un nuevo código de acceso de un solo uso de correo electrónico, use el siguiente fragmento de código:
val submitCodeActionResult = nextState.submitCode( code = code ) if (submitCodeActionResult is SubmitCodeError && submitCodeActionResult.isInvalidCode()) { // Inform the user that the submitted code was incorrect or invalid and ask for a new code to be supplied val newCode = retrieveNewCode() nextState.submitCode( code = newCode ) }
Asegúrese de incluir las instrucciones importación. Android Studio debe incluir automáticamente las instrucciones de importación.
Ha completado todos los pasos necesarios para registrar correctamente a un usuario en la aplicación. Compile y ejecute su aplicación. Si todo va bien, debería poder registrar correctamente al usuario mediante el código de acceso de un solo uso de correo electrónico o el correo electrónico y la contraseña.
Opcional: Iniciar sesión después de un flujo de registro
Después de un flujo de registro correcto, puede iniciar sesión de un usuario sin iniciar un flujo de inicio de sesión. Obtenga más información en el artículo Tutorial: Iniciar sesión del usuario después de registrarse en Android.