2016-09-21 3 views
7

Ich versuche, meinen Benutzer mit Cognito und Entwickler authentifizierten Identitäten zu authentifizieren. Meine Frage ist, wie setze ich die identityId auf die richtige zurück von meinem Entwickler-Backend in iOS mit objective-c?Amazon Cognito set identityId mithilfe der Entwicklerauthentifizierung Obj C

Wenn ich die Aufrufe manuell im Code oder mit Postboten mache, wird die korrekte ID von meinem Server zurückgegeben und Cognito erkennt sie und tauscht die Token korrekt aus.

Das iOS-Framework scheint eine IdentityId zuzuordnen, die nicht korrekt ist. Ich habe wirklich Mühe, die Dokumentation zu verstehen, da vieles davon veraltet und vage ist.

Hier ist mein Code unten:

NSLog(@"Complete login"); 

    NSMutableDictionary *merge = [NSMutableDictionary dictionaryWithDictionary:self.credentialsProvider.logins]; 
    [merge addEntriesFromDictionary:logins]; 

    self.credentialsProvider.logins = merge; 

    // Force a refresh of credentials to see if we need to merge 
    task = [self.credentialsProvider refresh]; 

    NSLog(@"Complete login 2-- %@", self.credentialsProvider.identityId); //The identityId assigned is incorrect... 
    NSLog(@"Complete login 2-- %@", self.credentialsProvider.identityPoolId); //The identityPoolId is correct 

Klarheit UNTEN: Dies ist, wie es bisher funktioniert: 1 - Wenn die App seine läuft vergibt automatisch eine zufällige identityId von Amazon (also der Benutzer ursprünglich nicht authentifiziert). 2 - Der Benutzer gibt seine Zugangsdaten ein, dann führt mein Code eine URL-Anfrage an mein Backend durch, die ein gültiges Token und die korrekte identityId für den Benutzernamen und das Passwort zurückgibt. 3 - Nun muss diese neue identityId im Code initialisiert werden, um die alte nicht authentifizierte identityId zu überschreiben. 4 -Die neue IdendityId und das Token, die von meinem Server zurückgegeben wurden, müssen zur endgültigen Authentifizierung an Cognito gesendet werden, und Cognito gibt mehr Authentifizierung zurück. Wenn ich manuell sage, sende ich die Anfrage per Postbote.

Kurz gesagt: 1: Wie ändere/setze ich meine identityId? 2: Wie sende ich die aktualisierten Anmeldeinformationen, die ich von meinem Backend in meinem Client erhalten habe, an Cognito?

+0

Versuchen Sie Ident zusammenführen ies? Auch was meinst du mit falscher Identität (eine Identität, die nicht zum aktuellen Benutzer gehört?). Kannst du auch bitte erläutern, was meinst du damit, dass du die Identität manuell festlegst? Welche Identität werden Sie manuell festlegen? –

+0

Ich habe oben einige Klarheit hinzugefügt. – Luben

Antwort

2

Das Feld identityId in der AWSCognitoCredentialsProvider-Instanz hat das Attribut readonly, so dass es nach der Initialisierung nicht geändert werden kann. Die einzige Möglichkeit, es zu setzen, ist in seiner Initialisierung.

id<AWSCognitoCredentialsProvider> credentialsProvider = 
    [[AWSCognitoCredentialsProvider alloc] 
     initWithRegionType:<Region> 
      identityProvider:identityProvider 
      unauthRoleArn:nil 
       authRoleArn:nil]; 

Nachdem der Benutzer authentifiziert wird, stellen Sie sicher, die Anmeldungen Karte wie folgt zu aktualisieren:

credentialsProvider.logins = @{DeveloperProviderName: userIdentifier} 
[credentialsProvider refresh]; 

Quelle: http://docs.aws.amazon.com/cognito/latest/developerguide/developer-authenticated-identities.html

ps: Stellen Sie sicher, dass Sie die Identity-Provider korrekt implementieren und in dem Auffrischungs Methode sollten Sie die identityId setzen

- (AWSTask *)refresh { 
    /* 
    * Get the identityId and token by making a call to your backend 
    */ 
    // Call to your backend 

    // Set the identity id and token 
    self.identityId = response.identityId; 
    self.token = response.token; 
    return [AWSTask taskWithResult:self.identityId]; 
} 
+0

Vielen Dank @ramacode dürfen Sie und Ihre Familie gesegnet sein! – Luben

+0

@Luben froh zu helfen! – ramacode

Verwandte Themen