Руководство. Добавление регистрации в мобильном приложении Android с помощью собственной проверки подлинности
В этом руководстве показано, как зарегистрироваться пользователя с помощью однократного секретного кода или имени пользователя (электронной почты) и пароля и сбора атрибутов пользователей в мобильном приложении Android с помощью собственной проверки подлинности.
В этом руководстве описано следующее:
- Зарегистрируйте пользователя с помощью однократного секретного кода электронной почты или имени пользователя (электронной почты) и пароля.
- Сбор атрибутов пользователей во время регистрации.
- Обработка ошибок регистрации.
Необходимые компоненты
- Выполните действия, описанные в руководстве. Подготовка приложения Android для собственной проверки подлинности .
- Если вы хотите собирать атрибуты пользователей во время регистрации, настройте атрибуты пользователя при создании потока регистрации и входа.
Регистрация пользователя
Чтобы зарегистрироваться у пользователя с помощью одноразового секретного кода или имени пользователя (электронной почты) и пароля, вы собираете сообщение электронной почты от пользователя, а затем отправляете сообщение электронной почты, содержащее одноразовый секретный код пользователю. Пользователь вводит допустимый секретный код электронной почты для проверки имени пользователя.
Чтобы зарегистрироваться у пользователя, необходимо выполнить следующие действия.
Создайте пользовательский интерфейс для:
- Сбор сообщения электронной почты от пользователя. Добавьте проверку в входные данные, чтобы убедиться, что пользователь вводит допустимый адрес электронной почты.
- Соберите пароль при регистрации с помощью имени пользователя (электронной почты) и пароля.
- Соберите одноразовый секретный код электронной почты от пользователя.
- При необходимости соберите атрибуты пользователя.
- Повторно отправить одноразовый секретный код (рекомендуется).
- Запустите поток регистрации.
В приложении добавьте кнопку, событие выбора которой активирует следующий фрагмент кода:
CoroutineScope(Dispatchers.Main).launch { val parameters = NativeAuthSignUpParameters(username = email) // Assign 'password' param if you sign in with username (email) and password // parameters.password = password val actionResult: SignUpResult = authClient.signUp(parameters) if (actionResult is SignUpResult.CodeRequired) { val nextState = actionResult.nextState val submitCodeActionResult = nextState.submitCode( code = code ) if (submitCodeActionResult is SignUpResult.Complete) { // Handle sign up success } } }
- Используйте метод экземпляра пакета SDK,
signUp(parameters)
чтобы запустить поток регистрации. - Чтобы зарегистрироваться с помощью имени пользователя (адреса электронной почты) и пароля, создайте экземпляр класса
NativeAuthSignUpParameters
и назначьте имя пользователя и пароль. - Параметр регистрации
username
— это адрес электронной почты, который вы собираете от пользователя. - В наиболее распространенном случае
signUp(parameters)
возвращает результатSignUpResult.CodeRequired
, что указывает на то, что SDK ожидает от приложения отправки одноразового кода доступа, отправленного на адрес электронной почты пользователя. - Объект
SignUpResult.CodeRequired
содержит новую ссылку на состояние, которую можно получить.actionResult.nextState
- Новое состояние дает нам доступ к двум новым методам:
-
submitCode()
отправляет одноразовый секретный код электронной почты, который приложение собирает от пользователя. -
resendCode()
повторно отправляет секретный код электронной почты, если пользователь не получает код.
-
- Возвращает значение
submitCode()
SignUpResult.Complete
, указывающее, что поток завершен и пользователь был зарегистрирован. -
signUp(parameters)
также может возвращатьSignUpError
, чтобы указать, что произошла ошибка.
- Используйте метод экземпляра пакета SDK,
Сбор атрибутов пользователя во время регистрации
Регистрировать пользователя с помощью однократного секретного кода или имени пользователя (электронной почты) и пароля можно собирать атрибуты пользователей перед созданием учетной записи пользователя:
Экземпляр
NativeAuthSignUpParameters
принимает параметрattributes
:CoroutineScope(Dispatchers.Main).launch { val parameters = NativeAuthSignUpParameters(username = email) // Assign 'password' param if you sign in with username (email) and password // parameters.password = password parameters.attributes = userAttributes val actionResult: SignUpResult = authClient.signUp(parameters) //... }
Пакет SDK для Android предоставляет служебный класс
UserAttribute.Builder
, используемый для создания атрибутов пользователя. Например, чтобы отправить атрибуты пользователя города и страны , используйте следующий фрагмент кода для создания переменнойuserAttributes
:val userAttributes = UserAttributes.Builder () .country(country) .city(city) .build()
Имена методов в
UserAttribute.Builder
классе совпадают с программируемыми именами пользовательских атрибутов, которые они создают. Дополнительные сведения о построителе атрибутов пакета SDK для Android.Метод
signUp(parameters)
может возвращатьSignUpResult.AttributesRequired
, чтобы указать, что приложению необходимо отправить один или несколько обязательных атрибутов, прежде чем Microsoft Entra создает учетную запись. Эти атрибуты настраиваются администратором как обязательные в Центре администрирования Microsoft Entra. Microsoft Entra явно не запрашивает необязательные атрибуты пользователя.Результат
SignUpResult.AttributesRequired
содержитrequiredAttributes
параметр.requiredAttributes
— это списокRequiredUserAttribute
объектов, содержащих сведения о атрибутах пользователя, которые приложение должно отправить. Для обработкиactionResult is SignUpResult.AttributesRequired
используйте следующий фрагмент кода:val parameters = NativeAuthSignUpParameters(username = email) // Assign 'password' param if you sign in with username (email) and password // parameters.password = password parameters.attributes = userAttributes val actionResult: SignUpResult = authClient.signUp(parameters) if (actionResult is SignUpResult.AttributesRequired) { val requiredAttributes = actionResult.requiredAttributes // Handle "attributes required" result val nextState = actionResult.nextState nextState.submitAttributes( attributes = moreAttributes ) }
Обработка ошибок регистрации
Во время регистрации не все действия выполняются успешно. Например, пользователь может попытаться зарегистрироваться с уже использованным адресом электронной почты или отправить недопустимый секретный код электронной почты.
Обработка ошибки запуска регистрации
Для обработки ошибок для signUp()
метода используйте следующий фрагмент кода:
val parameters = NativeAuthSignUpParameters(username = email)
// Assign 'password' param if you sign in with username (email) and password
// parameters.password = password
val actionResult: SignUpResult = authClient.signUp(parameters)
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(parameters)
может возвращатьSignUpError
.SignUpError
указывает на результат неудачного действия, возвращенныйsignUp()
и не будет содержать ссылку на новое состояние.Если
actionResult is SignUpError
пакет SDK ДЛЯ MSAL Для Android предоставляет служебные методы, чтобы вы могли проанализировать конкретные ошибки дальше:- Метод
isUserAlreadyExists()
проверяет, использовалось ли имя пользователя для создания учетной записи. -
isInvalidAttributes()
проверяет, отправлен ли одно или несколько атрибутов, отправленных приложением сбой проверки, например неправильный тип данных. Он содержитinvalidAttributes
параметр, который является списком всех атрибутов, отправленных приложениями, но неудачной проверкой. -
isInvalidPassword()
Убедитесь, что пароль недопустим, например если пароль не соответствует всем требованиям к сложности паролей. Дополнительные сведения о политиках паролей Microsoft Entra -
isInvalidUsername()
Убедитесь, что имя пользователя недопустимо, например если сообщение электронной почты пользователя недопустимо. -
isBrowserRequired()
проверяет необходимость браузера (веб-резервного размещения) для завершения потока проверки подлинности. Этот сценарий происходит, если для завершения потока проверки подлинности недостаточно собственной проверки подлинности. Например, администратор настраивает электронную почту и пароль в качестве метода проверки подлинности, но приложение не может отправлять пароль в качестве типа проблемы или просто не поддерживает его. Выполните действия, описанные в разделе "Поддержка веб-резервного размещения" в приложении Android, чтобы обрабатывать сценарий, когда это происходит. -
isAuthNotSupported()
проверяет, отправляет ли приложение тип вызова, который не поддерживает Microsoft Entra, это значение типа вызова, отличное от OOB или пароля. Дополнительные сведения о типах проблем.
Уведомите пользователя о том, что электронная почта уже используется или некоторые атрибуты недопустимы с помощью понятного сообщения в пользовательском интерфейсе приложения.
- Метод
Чтобы обработать ошибку недопустимых атрибутов, используйте следующий фрагмент кода:
val parameters = NativeAuthSignUpParameters(username = email) // Assign 'password' param if you sign in with username (email) and password // parameters.password = password parameters.attributes = userAttributes val actionResult: SignUpResult = authClient.signUp(parameters) if (actionResult is SignUpError && actionResult.isInvalidAttributes()) { val invalidAttributes = actionResult.invalidAttributes // Handle "invalid attributes" error, this time submit valid attributes val parameters = NativeAuthSignUpParameters(username = email) // Assign 'password' param if you sign in with username (email) and password // parameters.password = password parameters.attributes = userAttributes authClient.signUp(parameters) } //...
Обработка ошибки одноразового секретного кода отправки электронной почты
Для обработки ошибок для submitCode()
метода используйте следующий фрагмент кода:
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()
может возвращатьSubmitCodeError
.isInvalidCode()
Используйте метод для проверки конкретной ошибки, например, отправленный код недопустим. В этом случае для повторной обработки действия необходимо использовать предыдущую ссылку на состояние.Чтобы получить новый секретный код электронной почты, используйте следующий фрагмент кода:
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 ) }
Убедитесь, что вы включили инструкции импорта. Android Studio должна включать автоматические инструкции импорта.
Вы выполнили все необходимые действия для успешной регистрации пользователя в приложении. Скомпилируйте и запустите приложение. Если все хорошо, вы сможете успешно зарегистрироваться у пользователя с помощью однократного секретного кода или пароля электронной почты.
Необязательно. Вход после потока регистрации
После успешного выполнения регистрации вы можете войти в систему пользователя, не инициируя поток входа. Дополнительные сведения см. в руководстве по входу пользователя после регистрации в статье Android .