2017-02-15 6 views
0

Ich versuche, Benutzer mithilfe einer Lambda-Funktion zu authentifizieren, die in Node.js in AWS geschrieben wurde. Ich stecke jetzt fest. Der folgende Code funktioniert nicht wie erwartet:Wie authentifizieren Benutzer ihre Lambda-Funktionen und AWS Cognito?

var AWS = require('aws-sdk'); 
 
exports.handler = (event, context, callback) => { 
 
    AWS.config.region = 'us-east-1'; 
 
     var authenticationData = { 
 
     Username : 'username', 
 
     Password : 'password', 
 
    }; 
 
    var authenticationDetails = new AWS.CognitoIdentityServiceProvider.AuthenticationDetails(authenticationData); 
 
    var poolData = { UserPoolId : 'My-Pool-Id', 
 
     ClientId : 'My-Client-Id' 
 
    }; 
 
    var userPool = new AWS.CognitoIdentityServiceProvider.CognitoUserPool(poolData); 
 
    var userData = { 
 
     Username : 'username', 
 
     Pool : userPool 
 
    }; 
 
    var cognitoUser = new AWS.CognitoIdentityServiceProvider.CognitoUser(userData); 
 
    cognitoUser.authenticateUser(authenticationDetails, { 
 
     onSuccess: function (result) { 
 
      console.log('access token + ' + result.getAccessToken().getJwtToken()); 
 
      
 
      console.log('idToken + ' + result.idToken.jwtToken); 
 
     }, 
 

 
     onFailure: function(err) { 
 
      alert(err); 
 
     }, 
 

 
    }); 
 

 
};

Der obige Code in Cognito Documentation page

Aber alles, was ich bekam zur Verfügung gestellt wird, ist der folgende Fehler:

TypeError: AWS.CognitoIdentityServiceProvider.AuthenticationDetails is not a function 

Hat jemand eine Idee, was ich jetzt tun soll? Danke

Antwort

1

Sie verwenden AWSCognito, aber das ist nicht definiert. Ändern Sie es in AWS.

Versuchen Sie einen Wrapper für Cognito zu schreiben? Sie können diese Authentifizierung im Client statt in einem Lambda durchführen.

+0

Hallo @doorstuck, ich habe bereits auf AWS geändert, aber ich habe den gleichen Fehler. Was Wrapper betrifft, bin ich mir nicht sicher, ich bin ein Neuling in diesem Bereich. Alles, was ich getan habe, war, in der ersten Zeile des Codes "var AWS = require ('aws-sdk');" Ich habe gerade inline codiert und keine Datei hochgeladen. Soll ich eine Bibliothek hochladen? – blackjack

+1

@blackjack Ich habe versucht herauszufinden, warum Sie diesen Login-Code im Backend und nicht im Client schreiben. Normalerweise würde ich den Code, den Sie dort haben, in den Client schreiben und dann die Anmeldeinformationen verwenden, die Sie von ihm erhalten, um andere AWS-Ressourcen aufzurufen. Sie können sogar die Anmeldeinformationen verwenden, die Sie auf dem Client erhalten, um API Gateway aufzurufen und die Anforderung zu authentifizieren. Und das ist in API Gateway eingebaut. Können Sie Ihr Codebeispiel mit der Änderung zu 'AWS.CognitoIdentityServiceProvider.AuthenticationDetails' aktualisieren. – doorstuck

+0

Ich fürchte, ich bin in die falsche Richtung gegangen. Ich habe versucht, eine Servless-Architektur mit Lambda zu erstellen, um alle Benutzerauthentifizierungs- und Registrierungsabläufe zu verwalten (Anmelden, Passwort zurücksetzen, Bestätigung und andere). Ich werde den Code ändern und dem Kunden einige Verantwortlichkeiten geben. Ich werde versuchen zu verstehen, wie AWS API Gateway die Client-Anmeldeinformationen überprüft. – blackjack

Verwandte Themen