Бөлісу құралы:


Руководство. Добавление регистрации в мобильном приложении Android с помощью собственной проверки подлинности

В этом руководстве показано, как зарегистрироваться пользователя с помощью однократного секретного кода или имени пользователя (электронной почты) и пароля и сбора атрибутов пользователей в мобильном приложении Android с помощью собственной проверки подлинности.

В этом руководстве описано следующее:

  • Зарегистрируйте пользователя с помощью однократного секретного кода электронной почты или имени пользователя (электронной почты) и пароля.
  • Сбор атрибутов пользователей во время регистрации.
  • Обработка ошибок регистрации.

Необходимые компоненты

Регистрация пользователя

Чтобы зарегистрироваться у пользователя с помощью одноразового секретного кода или имени пользователя (электронной почты) и пароля, вы собираете сообщение электронной почты от пользователя, а затем отправляете сообщение электронной почты, содержащее одноразовый секретный код пользователю. Пользователь вводит допустимый секретный код электронной почты для проверки имени пользователя.

Чтобы зарегистрироваться у пользователя, необходимо выполнить следующие действия.

  1. Создайте пользовательский интерфейс для:

    • Сбор сообщения электронной почты от пользователя. Добавьте проверку в входные данные, чтобы убедиться, что пользователь вводит допустимый адрес электронной почты.
    • Соберите пароль при регистрации с помощью имени пользователя (электронной почты) и пароля.
    • Соберите одноразовый секретный код электронной почты от пользователя.
    • При необходимости соберите атрибуты пользователя.
    • Повторно отправить одноразовый секретный код (рекомендуется).
    • Запустите поток регистрации.
  2. В приложении добавьте кнопку, событие выбора которой активирует следующий фрагмент кода:

    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, чтобы указать, что произошла ошибка.

Сбор атрибутов пользователя во время регистрации

Регистрировать пользователя с помощью однократного секретного кода или имени пользователя (электронной почты) и пароля можно собирать атрибуты пользователей перед созданием учетной записи пользователя:

  • Метод 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 Entra
    • isInvalidUsername()проверка имя пользователя недопустимо, например, если пользователь недопустим.
    • 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 .

Следующие шаги

Руководство. Добавление и выход с помощью однократного секретного кода электронной почты в приложении Android.