2

現在取り組んでいる iOS アプリケーションがあり、AWS Cognito を使用してユーザー認証を管理しています。事前に作成されたサインイン インターフェイスを使用しています。ただし、AWS コンソールでユーザーが作成されると、そのユーザーには一時パスワードが割り当てられます。このパスワードは、ユーザーが最初にログインするときに変更する必要があります。これは、 AWS コンソールのユーザー プールの詳細。

管理者が作成したユーザーが初めてサインインしようとすると、「NEW_PASSWORD_REQUIRED」チャレンジが発生します。事前に作成されたサインイン ワークフローは明らかにそのチャレンジを処理しないため、それがいつ発生したかを検出し、ユーザー名、現在のパスワード、および新しいパスワードを受け入れる新しいビュー コントローラーを開く方法を学びました。チャレンジを検出するために、チャレンジが発生したときに呼び出されるライブラリ関数を編集し、NotificationCenter を介して通知を渡しました。ライブラリ ファイルを編集することはおそらくベスト プラクティスではないことはわかっていますが、問題が発生したときにコードが認識できるようにするには、それが唯一の方法です。

View Controller は、 を使用してユーザーのパスワードを変更しようとします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、および Web 全般について説明していますが、有効な解決策は見つかりませんでした。この質問に気づきました: AWS iOS SDK では、FORCE_CHANGE_PASSWORD ユーザー ステータスをどのように処理しますか?同じ質問のように見え、回答されています。残念ながら、その答えでコードを動作させることができませんでした。ユーザーがボタンをタップしてパスワードを変更し、提供された情報をテキスト フィールドに入力したときに呼び出される関数を次に示します。

@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")
    }
}

おそらくこれは認証の問題であると考えて、別の役割を引き受けてそのようにパスワードを変更する方法を見つけようとしましたが、その方法を理解できませんでした。どんな助けでも歓迎です!これは間違いなく私が今まで経験した中で最もイライラするバグです!

4

0 に答える 0