3

Xcode 7.3을 사용하여 Swift에서 iOS 앱을 개발 중입니다. 이 응용 프로그램은 DynamoDB 데이터베이스와 통신하여 사용자가 데이터를 읽고 쓸 수있게합니다. 최근에 AWSDynamoDB, AWSCognito, AWSCognitoIdentityProvider 및 기타 AWS 포드가 포함 된 광고 모음을 업데이트했습니다.AWS Cognito 오류 : 인증 위임이 설정되지 않았습니다.

let serviceConfiguration = AWSServiceConfiguration(region: .USEast1, credentialsProvider: nil) 
    let userPoolConfiguration = AWSCognitoIdentityUserPoolConfiguration(clientId:APP_CLIENT_ID, clientSecret: appSecret, poolId: USER_POOL_ID) 
    AWSCognitoIdentityUserPool.registerCognitoIdentityUserPoolWithConfiguration(serviceConfiguration, userPoolConfiguration: userPoolConfiguration, forKey: USER_POOL_NAME) 
    let pool = AWSCognitoIdentityUserPool(forKey:USER_POOL_NAME) 
    let credentialsProvider = AWSCognitoCredentialsProvider(regionType: .USEast1, identityPoolId: IDENTITY_POOL_ID, identityProviderManager:pool) 
    let configuration = AWSServiceConfiguration(region:.USEast1, credentialsProvider:credentialsProvider) 
    AWSServiceManager.defaultServiceManager().defaultServiceConfiguration = configuration 
:이 지침을 다음의 일환으로

http://docs.aws.amazon.com/cognito/latest/developerguide/amazon-cognito-integrating-user-pools-with-identity-pools.html

, 내가 AppDelegate에 클래스의 didFinishLaunchingWithOptions 메소드에 다음 코드를 넣어 : 나는 또한이 페이지의 지침에 따라 새 사용자 풀을 설정

AWS 콘솔에서 시작하여 Cognito, Federated Identities, 지침에 따라 작성한 ID 풀 "내역 풀 편집"을 탐색 한 다음 "ID 풀 ID"옆에 표시된 문자열을 복사하여 IDENTITY_POOL_ID 값을 얻었습니다. 동일한 페이지에서 "인증 공급자"를 확장하고 "Cognito"탭을 선택하여 APP_CLIENT_ID의 값을 얻었습니다. USER_POOL_NAME의 경우이 페이지에서 "ID 풀 이름"을 사용하고 USER_POOL_ID의 경우 "인증 공급자"아래에 나열된 "사용자 풀 ID"값을 사용했습니다. 개발자 가이드가 사용해야하는 가치가 무엇인지 확실하지 않았기 때문에이 값을 올바르게 설정했는지 여부는 분명하지 않습니다.

[Error] AWSCredentialsProvider.m line:569 | __44-[AWSCognitoCredentialsProvider credentials]_block_invoke.345 | Unable to refresh. Error is [Error Domain=com.amazonaws.AWSCognitoIdentityProviderErrorDomain Code=-1000 "Authentication delegate not set" UserInfo={NSLocalizedDescription=Authentication delegate not set}]

이 앱이 출시 여전히 수행하지만, 또한 DynamoDB의 데이터에 액세스 할 수 이제 불가능하다 : 나는 응용 프로그램을 실행할 때

는 포드를 업데이트하고 이러한 변경 한 후, 나는 오류가 표시 . 문제의 일부는 DynamoDB 데이터베이스가 USEast가 아니라는 것입니다. 실제로이 오류가 발생하는지 여부는 확실하지 않습니다. AppDelegate에서 코드를 변경하는 것 외에도이 오류의 가능한 원인을 찾으려고 시도했지만 오류는 동일하게 유지됩니다. 조사 할만한 원인은 무엇입니까? 차이가 나는 경우이 앱이 DynamoDB 기능을 복원하는 것 외에도 사용자에게 권한을 부여하도록 허용하고 있으며이 문제를 해결하는 과정에서이 두 가지를 모두 수행하고자합니다.

답변

3

사용자 등록 또는 로그인을 시도 할 때 발생하는 문제인 것처럼 보입니다. 샘플 코드에서 pool.delegate 값을 설정하지 마십시오. 이 라인은이 블로그 게시물을 시작하는 데 도움이해야 이것은 또한 AWSCognitoIdentityInteractiveAuthenticationDelegate

를 구현해야 AppDelegate에

pool.delegate = self 

에 있어야합니다 : https://mobile.awsblog.com/post/TxGNH1AUKDRZDH/Announcing-Your-User-Pools-in-Amazon-Cognito

샘플 애플리케이션은 또한 수 있습니다 도움이 https://github.com/awslabs/aws-sdk-ios-samples/blob/75ada5b6283b7c04c1214b2e1e0a6394377e3f2b/CognitoYourUserPools-Sample/Objective-C/CognitoYourUserPoolsSample/AppDelegate.h

+0

감사합니다. 링크가 도움이되었습니다. 그러나 이제는 로그인/등록 화면을 설정 했으므로 정보를 입력하고 앱에 등록하려고하면 새로운 오류가 발생합니다. { "__ type": "ResourceNotFoundException", "message": "User pool client #### does not exist. "} 이것은 APP_CLIENT_ID에 사용하는 것과 같은 값이며"인증 공급자 "아래의"응용 프로그램 클라이언트 ID "필드에서 복사했지만 다른 곳에서는 나타나지 않습니다. 이 값이 사용자 풀 또는 연합 ID 풀에있는 다른 값과 일치해야합니까? 내 수영장을 만들 때 어디에서이 가치를 얻어야합니까? – user3726962

+0

신경 쓰지 마라. 나는 사용자 풀 콘솔을 더 자세히 살펴보고 내가 찾던 값을 발견했다. – user3726962