Danke für die Hilfe im Voraus!Amazon Cognito mit iOS: Zugang zu Identität verboten
Ich habe Probleme mit Amazon Cognito, Daten ordnungsgemäß zu speichern/zu synchronisieren.
Auf der dataset.synchronize() Linie (die nicht die Daten in Cognito speichert), erhalte ich einen großen Ausgangsfehler wie (mit ID spielte out):
nicht nilAWSCredentialsProvider.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.}]
Die cognitoID ist richtig und kehrt (und passt die Werte, die ich online lesen kann)
Zum Beispiel, nachdem sie mit Facebook Authentifizierung durchführen ich folgendes:
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}}
ich Daten von Gesicht lesen kann Buch richtig, und alle Authentifizierung erfolgte korrekt von dem, was ich sagen kann. Ich vermute, es gibt etwas Einfaches, das hier an der Wurzel ist, aber nachdem ich mehrere Tage verbracht habe, kann ich es nicht herausfinden! Die Verwendung des IAM-Checkers im AWS-Portal gibt alle "grünen Checks" für Cognito-Funktionen zurück, so dass ich sicher bin, dass dies auch kein Berechtigungsproblem auf der Serverseite ist.
Nochmals vielen Dank für Ihre Einsichten!
Edit: Vor dem Stück Code oben, rufe ich:
let credentialsProvider = self.initializeCognito()
, die läuft (Identität Pool ID spielte out):
func initializeCognito() -> AWSCognitoCredentialsProvider
{
let credentialsProvider = AWSCognitoCredentialsProvider(
regionType: AWSRegionType.USEast1, identityPoolId: "******")
let defaultServiceConfiguration = AWSServiceConfiguration(
region: AWSRegionType.USEast1, credentialsProvider: credentialsProvider)
AWSServiceManager.defaultServiceManager().defaultServiceConfiguration = defaultServiceConfiguration
return credentialsProvider
}
Danke für die Antwort! In der vierten Codezeile, wie oben gezeigt, übergebe ich das Facebook Token an den cognito credentials provider - ist das nicht ausreichend? Wenn ich fragen könnte, was hätte ich schreiben sollen? Vielen Dank! – kmypwn
Das hängt ein bisschen. Schlägt es sofort fehl, nachdem Sie sich angemeldet haben? Oder schließen Sie die App und warten ein wenig? Wenn Ersteres, initialisierst du den Sync-Client mit diesem Credentials-Provider? –
Nach der Anmeldung bei Facebook (die erfolgreich ist), wird dieser Code sofort aufgerufen. cognitoID gibt "korrekt" zurück, d. h., wenn ich print (cognitoID) habe, um sicher zu gehen, dass ich nicht null oder etwas unsinniges bekomme, wird ein eindeutiger Identifikator (gleich dem, den ich den AWS Cognito Identity Browser finde) korrekt gedruckt. Ich hatte den CredentialsProvider auskommentiert.refresh() -Zeile, aber das Einfügen von nur gibt einen anderen Fehler ähnlich dem bereits für die .Synchronise() - Zeile zur Verfügung gestellt. Kurz gesagt, nein, es gibt kein Ende/Wiedereröffnung! – kmypwn