0

モバイル ハブの紹介に従って、AWSCognito をアプリにセットアップしました。IDが見つかりませんと表示されます。ID はユーザー プールにあり、検証済みとしてマークされているバックエンドでも確認できます。このエラーが表示されるのはなぜですか?

コード:

func handleLoginWithSignInProvider(signInProvider: AWSSignInProvider) {
        AWSIdentityManager.defaultIdentityManager().loginWithSign(signInProvider, completionHandler:
            {(result: Any?, error: Error?) -> Void in
                if error == nil {
                    /* Handle successful login. */
                    print("success")
                }
                print("Login with signin provider result = \(result), error = \(error)")
        })
    }

エラー:

GetCredentialsForIdentity に失敗しました。エラーは [Error Domain=com.amazonaws.AWSCognitoIdentityErrorDomain Code=10 "(null)" UserInfo={__type=ResourceNotFoundException, message=Identity 'eu-west-1:xxxxxxx' not found.}] AWSiOSSDK v2.4.16 [エラー] AWSCredentialsProvider.m 行:577 | __44-[AWSCognitoCredentialsProvider 認証情報]_block_invoke.353 | リフレッシュできません。エラーは [Error Domain=com.amazonaws.AWSCognitoIdentityErrorDomain Code=10 "(null)" UserInfo={__type=ResourceNotFoundException, message=Identity 'eu-west-1:937fe0c4-974b-4f77-a835-425e1d9d9e00' not found.} です。 ] サインインプロバイダーでログイン 結果 = nil、エラー = Optional(Error Domain=com.amazonaws.AWSCognitoIdentityErrorDomain Code=10 "(null)" UserInfo={__type=ResourceNotFoundException、message=Identity 'eu-west-1:xxxxxxxxx'

4

3 に答える 3

1

ユーザーの ID プール ID が見つからなかったようです。これは、ユーザー プール全体の ID であるユーザー プール ID が見つからないこととは異なります。欠落している ID は、ユーザーのデバイス自体の ID のようです。

これは、Cognito > Federated Identities で ID ID を手動で削除した場合に発生した可能性があります。それを取得する方法はないため、次の手順を実行する必要があります。

これをシミュレーターで実行していて、すぐに修正したい場合は、[ハードウェア] > [すべてのコンテンツと設定を消去] をクリックします。これを行うと当然ですが、SDK に新しい ID ID を強制的に取得させることに注意してください。

これをモバイル デバイスで実行している場合、またはより良い修正が必要な場合でも、SDK に新しい ID ID を強制的に取得させる必要があります。これを行うには、キーチェーンをクリアします。次に、getIdentityId を呼び出して新しい ID を取得します。これが機能する理由は次のとおりです。

「このプロバイダーの ID ID を取得/取得します。ID ID がこのプロバイダーに既に設定されている場合、リモート呼び出しは行われず、AWSTask の結果として ID が返されます (identityId はプロパティとしても使用できます)。このプロバイダーに identityId が設定されていない場合は、サービスから取得されます」

あなたがswiftを使っているのを見て、それを行う方法は次のとおりです:

if error == nil {
   print("success")
} else {
   if let errorDescription = error?.localizedDescription {
       if errorDescription == "The operation couldn’t be completed. (com.amazonaws.AWSCognitoIdentityErrorDomain error 10.)" {
           let credentialsProvider = AWSCognitoCredentialsProvider(regionType: AWSRegionType.USEast1, identityPoolId: "yourIdentityPoolId")
           credentialsProvider.clearKeychain()
           credentialsProvider.getIdentityId()
       }
   }
}

詳細については、次の便利な AWS スレッドをご覧ください。

https://forums.aws.amazon.com/thread.jspa?threadID=249749

また、AWSCredentialsProvider に関する AWS ドキュメントも確認してください。

http://aws.github.io/aws-sdk-ios/docs/reference//Classes/AWSCognitoCredentialsProvider.html#//api/name/clearKeychain

そして、それはトリックです!私が同じ問題を抱えていたときに私のために働いた。幸運を!このアプローチに問題がある場合、または一般的に問題がある場合は、遠慮なく私にメッセージを送ってください。

于 2018-08-27T04:50:02.653 に答える
0

「バックエンドで確認できます」とは、Cognito ID ブラウザでのことですか? メッセージから ID ID を取得しましたが、Cognito データ ストアに保存されていません。それが存在することをどのように確認していますか?

資格情報プロバイダーをクリアしてから再試行してください。奇妙なメタデータが内部に残っている可能性があります。

于 2017-01-17T00:14:08.673 に答える