2016-04-05 27 views
0

Yardımlarınız için şimdiden teşekkür ederiz!iOS ile Amazon Cognito: Kimlik Yasasına Erişim

Verileri düzgün şekilde saklamak/eşzamanlamak için Amazon Cognito'yu alıp almama konusunda bazı sorun yaşıyorum.

AWSCredentialsProvider.m line:429 | __73-[AWSCognitoCredentialsProvider 
getCredentialsWithCognito:authenticated:]_block_invoke | GetCredentialsForIdentity 
failed. Error is [Error Domain=com.amazonaws.AWSCognitoIdentityErrorDomain 
Code=10 "(null)" UserInfo={__type=NotAuthorizedException, message=Access to 
Identity '*****' is forbidden.}] 

cognitoID sıfır değildir: (Contigo'dan veri depolamak değildir) dataset.synchronize() İnternet üzerinden

I (İD üzerinden rol ile birlikte) gibi büyük bir çıkış hatası elde

if (FBSDKAccessToken.currentAccessToken() != nil) 
    { 
     let fbCognitoToken = FBSDKAccessToken.currentAccessToken().tokenString 
     credentialsProvider.logins = [AWSCognitoLoginProviderKey.Facebook.rawValue: fbCognitoToken] 
     // Retrieve your Amazon Cognito ID 
     credentialsProvider.getIdentityId().continueWithBlock { (task: AWSTask!) -> AnyObject! in 
      if (task.error != nil) { 
       print("Error: " + task.error!.localizedDescription) 
      } 
      else { 
       // the task result will contain the identity id 
       let cognitoId = task.result 

       //checking if cognito was successful, if true, sets success condition to true to prepare for segue into app 
       if cognitoId != nil{ 
        print (cognitoId) 
        cognitoSuccess = true 

        let syncClient = AWSCognito.defaultCognito() 

        let dataset = syncClient.openOrCreateDataset("User_Data") 
        dataset.setString("[email protected]", forKey:"Email") 
       // credentialsProvider.refresh() 
        dataset.synchronize() 
        } }return nil}} 

ben Yüz verileri okuyabilir: ve düzgün döner (ve çevrimiçi okuyabilir değerlerini eşleşir) Facebook ile kimlik doğrulaması sonra örneğin

, aşağıdaki gerçekleştirmek doğru şekilde kitap ve tüm kimlik doğrulaması, söyleyebileceğimden doğru bir şekilde oluştu. Burada kökünde basit bir şey olduğunu sanıyorum, ama birkaç gün geçirdikten sonra, bunu anlayamıyorum! AWS portalındaki IAM denetleyicisini kullanmak, Cognito işlevleri için tüm "yeşil çekleri" döndürür; bu nedenle, bunun sunucu tarafında da bir izin sorunu olmadığını biliyorum.

Sahip olabileceğiniz herhangi bir içgörü için tekrar teşekkürler!

Düzenleme: Yukarıdaki kod yığın önce ben çağırır: ishal

let credentialsProvider = self.initializeCognito() 

(kimlik havuzu kimliği dışarı yıldız işaretli): Eğer olduğunuzda

func initializeCognito() -> AWSCognitoCredentialsProvider 
{ 
    let credentialsProvider = AWSCognitoCredentialsProvider(
     regionType: AWSRegionType.USEast1, identityPoolId: "******") 

    let defaultServiceConfiguration = AWSServiceConfiguration(
     region: AWSRegionType.USEast1, credentialsProvider: credentialsProvider) 

    AWSServiceManager.defaultServiceManager().defaultServiceConfiguration = defaultServiceConfiguration 

    return credentialsProvider  
} 

cevap

0

sona erdi cevabı çözme - ilk kez AWS'yi kurduğumda ve Amazon'un bazı kılavuzlarını takip ettiğimde, uygulamanın App Delegate uygulamasında yeni bir kimlik bilgisi oluşturmak için kod yerleştirmiştim. Bunu unuttum ve daha sonra başka bir kimlik bilgilerini başlatmayı denedimProvider. Bu karışıklık, sorunları yarattı ve Uygulama Temsilcisindeki başlatmanın kaldırılması kimlik doğrulama sorunlarını giderdi.

0

O istisna atılabilir kimliği doğrulanmış bir kimlik için kimlik bilgileri almaya çalışan herhangi bir sağlayıcı belirteci vermeden. Cognito, verilecek en az bir tane gerektirir.

Başarısız olan GetCredentialsForIdentity çağrısı sırasında Facebook simgesi eklediğinizi kontrol edebilir misiniz? Eğer değilse, bu senin sorunun.

Düzenleme:

Eğer AWSCognito.defaultCognito() kullanıyorsanız bu yana, senkronizasyon istemcisi doğru kimlik sağlayıcı kullandığından emin olmak this docs page üzerine örneği izlemeye yardımcı olabilir:

let configuration = AWSServiceConfiguration(region: AWSRegionType.USEast1, credentialsProvider: credentialsProvider) 

AWSServiceManager.defaultServiceManager().defaultServiceConfiguration = configuration 
+0

Yanıt için teşekkürler! Yukarıdaki 4. kod satırında, Facebook belirtecini dolandırıcılık bilgisi sağlayıcısına iletiyorum - bu yeterli değil mi? Eğer sorabilirsem, ne yazmalıyım? Teşekkürler! – kmypwn

+0

Bu biraz değişir. Giriş yapmayı denedikten hemen sonra başarısız mı oluyor? Yoksa uygulamayı kapatıp biraz beklemiyor musunuz? Eskiyse, senkronizasyon istemcisini bu kimlik bilgileri sağlayıcısıyla mı başlatıyorsunuz? –

+0

Facebook'a giriş yaptıktan (bu başarılı), bu kod hemen çağrılır. cognitoID, "doğru" ifadesini döndürür; yani, ben nil olmamaya ya da saçma sapan bir şey olmadığına emin olmak için yazdırdığımda (cognitoID), benzersiz bir tanımlayıcı (AWS Cognito Identity Browser'ı bulabildiğim kadarıyla) doğru şekilde yazdırılır. CredentialsProvider'ı yorumlamıştım.refresh() satırı, ancak bunu koymak, sadece .synchronise() satırı için sağlanan bir başka hataya benzer başka bir hata döndürür. Yani kısacası, hayır, kapanış/tekrar açma yok! – kmypwn

İlgili konular