Tutoriel : Ajouter une inscription à une application mobile Android à l’aide de l’authentification native
Ce tutoriel montre comment inscrire un utilisateur à l’aide d’un code secret à usage unique envoyé par e-mail ou d’un nom d’utilisateur (e-mail) et d’un mot de passe, et à collecter les attributs utilisateur dans votre application mobile Android à l’aide de l’authentification native.
Dans ce tutoriel, vous allez apprendre à :
- Inscrivez un utilisateur à l’aide d’un code secret à usage unique envoyé par e-mail ou d’un nom d’utilisateur (e-mail) et d’un mot de passe.
- Collecter les attributs utilisateur lors de l’inscription.
- Gérer les erreurs d’inscription.
Prérequis
- Suivez les étapes de l’article Tutoriel : Préparer votre application Android pour l’authentification native.
- Si vous souhaitez collecter les attributs utilisateur lors de l’inscription, configurez les attributs utilisateur lorsque vous créez votre flux utilisateur d’inscription et de connexion.
Inscrire un utilisateur
Pour inscrire un utilisateur à l’aide d’un code secret à usage unique envoyé par e-mail ou d’un nom d’utilisateur (e-mail) et d’un mot de passe, collectez l’adresse e-mail de l’utilisateur, puis envoyez-lui un e-mail contenant un code secret à usage unique. L’utilisateur entre un code secret à usage unique valide pour valider son nom d’utilisateur.
Pour inscrire un utilisateur, vous devez :
Créer une interface utilisateur pour :
- Collecter l’adresse e-mail de l’utilisateur. Ajouter une validation à vos entrées pour vérifier que l’utilisateur entre une adresse e-mail valide.
- Collecter un mot de passe si vous vous inscrivez avec un nom d’utilisateur (e-mail) et un mot de passe.
- Collecter auprès de l’utilisateur un code secret à usage unique envoyé par e-mail.
- Collecter les attributs utilisateur, si besoin.
- Renvoyer un code secret à usage unique (recommandé).
- Démarrer le flux d’inscription.
Dans votre application, ajoutez un bouton dont l’événement de sélection déclenche l’extrait de code suivant :
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 } } }
- Utilisez la méthode d’instance du kit SDK,
signUp(username)
pour démarrer le flux d’inscription.- Pour vous inscrire avec un nom d’utilisateur (adresse e-mail) et un mot de passe, transmettez votre paramètre de mot de passe à la fonction
signUp
,signUp(username, password)
.
- Pour vous inscrire avec un nom d’utilisateur (adresse e-mail) et un mot de passe, transmettez votre paramètre de mot de passe à la fonction
- Le paramètre de la méthode,
username
, correspond à l’adresse e-mail que vous collectez auprès de l’utilisateur. - Dans le scénario le plus courant,
signUp(username)
ousignUp(username, password)
retourne un résultat,SignUpResult.CodeRequired
, qui indique que le SDK s’attend à ce que l’application soumette le code secret à usage unique envoyé par e-mail à l’adresse e-mail de l’utilisateur. - L’objet
SignUpResult.CodeRequired
contient une référence au nouvel état, que nous pouvons récupérer viaactionResult.nextState
. - Le nouvel état nous donne accès à deux nouvelles méthodes :
submitCode()
soumet le code secret à usage unique envoyé par e-mail que l’application collecte auprès de l’utilisateur.resendCode()
renvoie le code secret à usage unique envoyé par e-mail si l’utilisateur ne reçoit pas le code.
submitCode()
renvoieSignUpResult.Complete
, ce qui indique que le flux est terminé et que l’utilisateur est inscrit.signUp(username)
ousignUp(username, password)
peut également retournerSignUpError
pour indiquer qu’une erreur s’est produite.
- Utilisez la méthode d’instance du kit SDK,
Collecter les attributs utilisateur lors de l’inscription
Que vous inscriviez un utilisateur à l’aide d’un code secret à usage unique envoyé par e-mail ou à l’aide d’un nom d’utilisateur (e-mail) et d’un mot de passe, vous pouvez collecter les attributs utilisateur avant la création du compte de l’utilisateur :
La méthode
signUp()
accepte un paramètreattributes
, commesignUp(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 ) //... }
Le SDK Android fournit une classe utilitaire
UserAttribute.Builder
que vous utilisez pour créer des attributs utilisateur. Par exemple, pour envoyer les attributs utilisateur ville et pays, utilisez l’extrait de code suivant pour générer la variableuserAttributes
:val userAttributes = UserAttributes.Builder () .country(country) .city(city) .build()
Les noms de méthodes de la classe
UserAttribute.Builder
sont identiques aux noms programmables des attributs utilisateur qu’ils génèrent. Découvrez plus en détail le Générateur d’attributs du kit Android SDK.La méthode
signUp(username, attributes)
ousignUp(username, attributes, password)
peut également retournerSignUpResult.AttributesRequired
pour indiquer que l’application doit soumettre un ou plusieurs attributs obligatoires avant que Microsoft Entra ne crée un compte. Ces attributs sont configurés par l’administrateur comme étant obligatoires dans le centre d’administration Microsoft Entra. Microsoft Entra ne demande pas explicitement d’attributs utilisateur facultatifs.Le résultat de
SignUpResult.AttributesRequired
contient un paramètrerequiredAttributes
.requiredAttributes
est une liste d’objetsRequiredUserAttribute
, qui contient des détails sur les attributs utilisateur que l’application doit soumettre. Pour géreractionResult is SignUpResult.AttributesRequired
, utilisez l’extrait de code suivant :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 ) }
Gérer les erreurs d’inscription
Pendant l’inscription, toutes les actions n’aboutissent pas. Par exemple, l’utilisateur peut tenter de s’inscrire avec une adresse e-mail déjà utilisée, ou soumettre un code secret à usage unique envoyé par e-mail non valide.
Gérer les erreurs au début du processus d’inscription
Pour gérer les erreurs de la méthode signUp()
, utilisez l’extrait de code suivant :
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)
ousignUp(username, password, attributes)
peut retournerSignUpError
.SignUpError
indique un résultat d’action infructueux, retourné parsignUp()
, et n’inclut pas de référence au nouvel état.Si
actionResult is SignUpError
, Android SDK MSAL fournit des méthodes utilitaires pour vous permettre d’analyser les erreurs spécifiques plus en avant :- La méthode
isUserAlreadyExists()
vérifie si le nom d’utilisateur a déjà été utilisé pour créer un compte. isInvalidAttributes()
indique que la validation d’un ou de plusieurs attributs soumis par l’application a échoué, par exemple à cause d’un mauvais type de données. Elle contient un paramètreinvalidAttributes
, qui représente la liste de tous les attributs soumis par les applications, mais dont la validation a échoué.isInvalidPassword()
indique que le mot de passe n’est pas valide, par exemple lorsque le mot de passe ne répond pas au niveau de complexité demandé pour les mots de passe. En savoir plus sur les stratégies de mot de passe de Microsoft EntraisInvalidUsername()
indique que le nom d’utilisateur n’est pas valide, par exemple lorsque l’e-mail de l’utilisateur n’est pas valide.isBrowserRequired()
vérifie si un navigateur (secours web) est nécessaire pour effectuer le flux d’authentification. Ce scénario se produit quand l’authentification native n’est pas suffisante pour effectuer le flux d’authentification. Par exemple, un administrateur configure l’adresse e-mail et le mot de passe en tant que méthode d’authentification, mais l’application ne parvient pas à envoyer password en tant que type de demande, ou ne le prend tout simplement pas en charge. Suivez les étapes décrites dans Prise en charge du secours web dans l’application Android pour gérer ce scénario quand il se produit.isAuthNotSupported()
vérifie si l’application envoie un type de demande que Microsoft Entra ne prend pas en charge, c’est-à-dire une valeur de type de demande autre que oob ou password. Découvrez plus en détail les types de demandes.
Informez l’utilisateur que l’e-mail est déjà utilisé ou que des attributs ne sont pas valides en utilisant un message convivial dans l’interface utilisateur de l’application.
- La méthode
Pour gérer l’erreur liée aux attributs non valides, utilisez l’extrait de code suivant :
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 ) } //...
Gérer l’erreur au moment où un code secret à usage unique envoyé par e-mail est soumis
Pour gérer les erreurs de la méthode submitCode()
, utilisez l’extrait de code suivant :
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()
peut renvoyerSubmitCodeError
.Utilisez la méthode
isInvalidCode()
pour vérifier l’erreur spécifique, par exemple si le code soumis n’est pas valide. Dans ce cas, la référence à l’état précédent doit être utilisée pour effectuer de nouveau l’action.Pour récupérer un nouveau code secret à usage unique envoyé par e-mail, utilisez l’extrait de code suivant :
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 ) }
Veillez à inclure les instructions import. Android Studio doit inclure automatiquement les instructions import.
Vous avez effectué toutes les étapes nécessaires pour inscrire correctement un utilisateur dans votre application. Créez et exécutez votre application. Si tout est bon, vous devriez pouvoir inscrire l’utilisateur à l’aide d’un code secret à usage unique envoyé par e-mail ou à l’aide d’un e-mail et d’un mot de passe.
Facultatif : Se connecter après un flux d’inscription
Après un flux d’inscription réussi, vous pouvez connecter un utilisateur sans lancer de flux de connexion. Découvrez davantage d’informations dans l’article Tutoriel : Connecter l’utilisateur après l’inscription dans Android.