Руководство. Добавление регистрации в мобильном приложении Android с помощью собственной проверки подлинности
В этом руководстве показано, как зарегистрироваться пользователя с помощью однократного секретного кода или имени пользователя (электронной почты) и пароля и сбора атрибутов пользователей в мобильном приложении Android с помощью собственной проверки подлинности.
В этом руководстве описано следующее:
- Зарегистрируйте пользователя с помощью однократного секретного кода электронной почты или имени пользователя (электронной почты) и пароля.
- Сбор атрибутов пользователей во время регистрации.
- Обработка ошибок регистрации.
Необходимые компоненты
- Выполните действия, описанные в руководстве. Подготовка приложения Android для собственной проверки подлинности .
- Если вы хотите собирать атрибуты пользователей во время регистрации, настройте атрибуты пользователя при создании потока регистрации и входа.
Регистрация пользователя
Чтобы зарегистрироваться у пользователя с помощью одноразового секретного кода или имени пользователя (электронной почты) и пароля, вы собираете сообщение электронной почты от пользователя, а затем отправляете сообщение электронной почты, содержащее одноразовый секретный код пользователю. Пользователь вводит допустимый секретный код электронной почты для проверки имени пользователя.
Чтобы зарегистрироваться у пользователя, необходимо выполнить следующие действия.
Создайте пользовательский интерфейс для:
- Сбор сообщения электронной почты от пользователя. Добавьте проверку в входные данные, чтобы убедиться, что пользователь вводит допустимый адрес электронной почты.
- Соберите пароль при регистрации с помощью имени пользователя (электронной почты) и пароля.
- Соберите одноразовый секретный код электронной почты от пользователя.
- При необходимости соберите атрибуты пользователя.
- Повторно отправить одноразовый секретный код (рекомендуется).
- Запустите поток регистрации.
В приложении добавьте кнопку, событие выбора которой активирует следующий фрагмент кода:
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 } } }
- Используйте метод экземпляра пакета SDK,
signUp(username)
чтобы запустить поток регистрации.- Чтобы зарегистрироваться с помощью имени пользователя (адреса электронной почты) и пароля, передайте параметр пароля в
signUp
функцию.signUp(username, password)
- Чтобы зарегистрироваться с помощью имени пользователя (адреса электронной почты) и пароля, передайте параметр пароля в
- Затем параметр метода — это адрес электронной почты,
username
который вы собираете от пользователя. - В большинстве случаев
signUp(username)
результат илиsignUp(username, password)
возвращает результат,SignUpResult.CodeRequired
указывающий, что пакет SDK ожидает отправки секретного кода электронной почты, отправленного на адрес электронной почты пользователя. - Объект
SignUpResult.CodeRequired
содержит новую ссылку на состояние, которую можно получить.actionResult.nextState
- Новое состояние дает нам доступ к двум новым методам:
submitCode()
отправляет одноразовый секретный код электронной почты, который приложение собирает от пользователя.resendCode()
повторно отправляет секретный код электронной почты, если пользователь не получает код.
- Возвращает значение
submitCode()
SignUpResult.Complete
, указывающее, что поток завершен и пользователь был зарегистрирован. signUp(username, password)
ТакжеsignUp(username)
можно вернутьсяSignUpError
, чтобы указать, что произошла ошибка.
- Используйте метод экземпляра пакета SDK,
Сбор атрибутов пользователя во время регистрации
Регистрировать пользователя с помощью однократного секретного кода или имени пользователя (электронной почты) и пароля можно собирать атрибуты пользователей перед созданием учетной записи пользователя:
Метод
signUp()
принимаетattributes
параметр, какsignUp(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 ) //... }
Пакет SDK для Android предоставляет служебный класс
UserAttribute.Builder
, используемый для создания атрибутов пользователя. Например, чтобы отправить атрибуты пользователя города и страны , используйте следующий фрагмент кода для создания переменнойuserAttributes
:val userAttributes = UserAttributes.Builder () .country(country) .city(city) .build()
Имена методов в
UserAttribute.Builder
классе совпадают с программируемыми именами пользовательских атрибутов, которые они создают. Дополнительные сведения о построителе атрибутов пакета SDK для Android.Метод
signUp(username, attributes)
илиsignUp(username, attributes, password)
метод может вернутьсяSignUpResult.AttributesRequired
, чтобы указать, что приложению необходимо отправить один или несколько обязательных атрибутов, прежде чем Microsoft Entra создает учетную запись. Эти атрибуты настраиваются администратором как обязательные в Центре администрирования Microsoft Entra. Microsoft Entra явно не запрашивает необязательные атрибуты пользователя.Результат
SignUpResult.AttributesRequired
содержитrequiredAttributes
параметр.requiredAttributes
— это списокRequiredUserAttribute
объектов, содержащих сведения о атрибутах пользователя, которые приложение должно отправить. Для обработкиactionResult is SignUpResult.AttributesRequired
используйте следующий фрагмент кода: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 ) }
Обработка ошибок регистрации
Во время регистрации не все действия выполняются успешно. Например, пользователь может попытаться зарегистрироваться с уже использованным адресом электронной почты или отправить недопустимый секретный код электронной почты.
Обработка ошибки запуска регистрации
Для обработки ошибок для signUp()
метода используйте следующий фрагмент кода:
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)
илиsignUp(username, password, attributes)
может возвращатьSignUpError
.SignUpError
указывает на результат неудачного действия, возвращенныйsignUp()
и не будет содержать ссылку на новое состояние.Если
actionResult is SignUpError
пакет SDK ДЛЯ MSAL Для Android предоставляет служебные методы, чтобы вы могли проанализировать конкретные ошибки дальше:- Метод
isUserAlreadyExists()
проверка, используется ли имя пользователя для создания учетной записи. isInvalidAttributes()
проверка, является ли одно или несколько атрибутов, которые приложение отправило сбой проверки, например неправильный тип данных. Он содержитinvalidAttributes
параметр, который является списком всех атрибутов, отправленных приложениями, но неудачной проверкой.isInvalidPassword()
проверка пароль недопустим, например если пароль не соответствует всем требованиям к сложности паролей. Дополнительные сведения о политиках паролей Microsoft EntraisInvalidUsername()
проверка имя пользователя недопустимо, например, если пользователь недопустим.isBrowserRequired()
проверка необходимость в браузере (веб-резервном сервере) для завершения потока проверки подлинности. Этот сценарий происходит, если для завершения потока проверки подлинности недостаточно собственной проверки подлинности. Например, администратор настраивает электронную почту и пароль в качестве метода проверки подлинности, но приложение не может отправлять пароль в качестве типа проблемы или просто не поддерживает его. Выполните действия, описанные в разделе "Поддержка веб-резервного размещения" в приложении Android, чтобы обрабатывать сценарий, когда это происходит.isAuthNotSupported()
проверка, отправляет ли приложение тип вызова, который не поддерживает Microsoft Entra, это значение типа вызова, отличное от OOB или пароля. Дополнительные сведения о типах проблем.
Уведомите пользователя о том, что электронная почта уже используется или некоторые атрибуты недопустимы с помощью понятного сообщения в пользовательском интерфейсе приложения.
- Метод
Чтобы обработать ошибку недопустимых атрибутов, используйте следующий фрагмент кода:
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 ) } //...
Обработка ошибки одноразового секретного кода отправки электронной почты
Для обработки ошибок для 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 .