Как изменить временный пароль пользователя с помощью AWS Cognito и iOS SDK? - PullRequest
0 голосов
/ 11 октября 2018

У меня есть приложение для iOS, над которым я работаю, и я использую AWS Cognito для управления аутентификацией пользователей.Я использую готовый интерфейс входа.Однако, когда пользователь создается в консоли AWS, ему назначается временный пароль, который пользователь должен будет изменить при первом входе в систему. На это указывает состояние «FORCE_CHANGE_PASSWORD» в разделе «Пользователи и группы»Детали пула пользователей в консоли AWS.

Когда пользователь, созданный администратором, пытается войти в систему впервые, возникает проблема «NEW_PASSWORD_REQUIRED».Поскольку готовый вход в рабочий процесс, по-видимому, не справляется с этой задачей, я узнал, как определить, когда это происходит, и открыть новый контроллер представления, который будет принимать имя пользователя, текущий пароль и новый пароль.Чтобы обнаружить проблему, я отредактировал библиотечную функцию, которая вызывается при возникновении этой проблемы, и передал уведомление через NotificationCenter.Я понимаю, что редактирование библиотечных файлов, вероятно, не лучшая практика, но это единственный способ, с помощью которого я мог начать работать, чтобы мой код знал, когда возникает проблема.

Контроллер представления пытается изменить пароль пользователя с помощью user.changePassword(OLD_PASSWORD, proposedPassword: NEW_PASSWORD).Это на самом деле не меняет пароль, хотя.Внутри обратного вызова .continueWith{ (response) -> Any? in я нахожу, что response выглядит следующим образом: <AWSTask: 0x7fd417e6ca90; completed = YES; cancelled = NO; faulted = YES; result = (null)>.

Нигде не могу найти ответ на эту проблему.Я искал документацию AWS (находя решение, но для android: https://docs.aws.amazon.com/cognito/latest/developerguide/using-amazon-cognito-user-identity-pools-android-sdk-authenticate-admin-created-user.html), а также здесь о переполнении стека, GitHub и сети в целом, но я не нашел никаких рабочих решений.Я понимаю, что этот вопрос: В AWS iOS SDK, как мне обработать FORCE_CHANGE_PASSWORD User Status , кажется, тот же вопрос, и на него дан ответ.Я не смог заставить свой код работать с этим ответом, к сожалению.Вот функция, которая вызывается, когда пользователь нажимает кнопку, чтобы изменить свой пароль с предоставленной информацией, введенной в текстовые поля:

@IBAction func submitNewPassword(_ sender:AnyObject) {
    print("Attempting to submit new password...")
    let pool: AWSCognitoIdentityUserPool = AWSCognitoIdentityUserPool(forKey: userPoolID)
    let user: AWSCognitoIdentityUser = pool.getUser(usernameInput.text!)
    user.changePassword(oldPasswordInput.text!, proposedPassword: newPasswordInput.text!).continueWith { (response) -> Any? in
        print("\n\nResponse is: \(response)\n\n")
    }
}

Я пытался выяснить, как принять другую роль и изменитьпароль таким образом, думая, что, возможно, это проблема с авторизацией, но я не смог понять, как это сделать.Любая помощь будет очень высоко ценится!Это определенно самая неприятная ошибка в моей жизни!

...