2017-04-07 1 views
1

Ich versuche, einen Benutzerdatensatz in ddb für Cognito-Benutzer zu erstellen, sobald sie ihre Registrierung bestätigen. Ich möchte die (föderierte) Identitäts-ID des Benutzers als Primärschlüssel verwenden.AWS Cognito - wie Benutzerdatensatz in Dynamodb erstellt wird, nachdem ein Benutzer die Registrierung bestätigt

Die Identitäts-ID ist jedoch im Lambda-Trigger "postConfirmation" nicht verfügbar. Tatsächlich ist die Identitäts-ID erst verfügbar, wenn sich der Benutzer mit seinem Zugriffstoken authentifiziert. Ich denke, das macht Sinn, wenn man bedenkt, dass Cognito User Pools ein Anbieter sind, wie Facebook und Google. Sie würden keine Identität erstellen, bis sie sich bei diesem Anbieter anmelden.

Im Gegensatz zu Facebook und Google gibt es keinen OAuth-Callback, um einen Datensatz zu erstellen, wenn Sie sich in einem Cognito-Benutzerpool anmelden. Der Benutzer meldet sich einfach so an:

cognitoUser.authenticateUser(authenticationDetails, { 
    onSuccess: function (result) { 
     console.log('access token + ' + result.getAccessToken().getJwtToken()); 
     AWS.config.credentials = new AWS.CognitoIdentityCredentials({ 
      IdentityPoolId: self.IdentityPoolId, 
      Logins: { 
       [`cognito-idp.${self.region}.amazonaws.com/${self.poolData.UserPoolId}`]: result.getIdToken().getJwtToken() 
      } 
     }); 
     console.log("AuthService: set the AWS credentials - " + JSON.stringify(AWS.config.credentials)); 
     self.currentUser = cognitoUser; 
     cb(null, result); 
    }, 

    onFailure: function(err) { 
     console.log(err); 
     cb(err, null); 
    } 

}); 

Nur dann wird die Identitäts-ID erstellt. Was ist dann die Standardmethode zum Erstellen eines Benutzerdatensatzes? Ist es Standard, den Datensatz zu erstellen, wenn sich der Benutzer zum ersten Mal anmeldet?

Antwort

2

Es gibt ein paar Möglichkeiten, wie Sie das tun könnten, denke ich. Eine könnte sein, den Sub-Wert als Schlüssel anstelle der Identitäts-ID zu verwenden. Es wird einem Benutzer bei der Erstellung übergeben und ist global eindeutig (wie Identitäts-ID). Wenn Sie diesen Weg gehen, ist Ihr Gedanke über die Verwendung des postConfirmation Callbacks groß.

Wenn Sie wirklich Identitäts-ID möchten (was Sie möglicherweise tun, wenn Sie andere AWS-Ressourcen haben und auf sie zugreifen möchten), dann empfehle ich Ihnen, dort Ihren eigenen Hook in den onSuccess-Block zu bauen. Überprüfen Sie, ob eine Zeile für diese Identitäts-ID existiert, und tun Sie nichts, wenn dies der Fall ist. Wenn nicht, erstellen Sie es. Ist das für Ihren Anwendungsfall sinnvoll? Oder gibt es mehr Falten?

+0

Mein Anwendungsfall wäre ein API-Gateway-Endpunkt wie/users /: id/projects, der alle Projekte für einen Benutzer abruft. Wäre es einfacher, den Sub-Wert oder die ID zu verwenden? Ich dachte an die Identität ID. – user1411469

+0

Benutzerpools haben eine enge Integration mit API GW. Wenn Sie alles hinter API GW abbilden, können Sie stattdessen sub verwenden. Die Verwendung der Identitäts-ID würde jedoch besser funktionieren, wenn Sie direkt vom Client auf Dynamo zugreifen möchten. Ich denke, die Arbeit ist in beiden Fällen ziemlich ähnlich. –

+0

Mit global einzigartig meinen Sie, dass Subs in all Ihren Benutzerpools einzigartig sind? – user1411469

Verwandte Themen