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