Как изменить временный пароль пользователя с помощью AWS Cognito и iOS SDK?
У меня есть приложение для 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")
}
}
Я пытался понять, как взять на себя другую роль и изменить пароль таким образом, думая, что, возможно, это проблема с авторизацией, но я так и не смог понять, как это сделать. Любая помощь будет принята с благодарностью! Это определенно самая неприятная ошибка, которую я когда-либо имел!