2016-06-28 9 views
4

Ich versuche, den AWS Cognito User Pool in meiner AWS Lambda-Funktion zu verwenden. Ich sah in der Anleitung, dass Sie die amazon-cognito-identity.min.js in Ihren Code aufnehmen müssten, aber ich bin mir nicht sicher, wie dies in Node js zu tun ist. Ich benutze npm install für die externen Module, aber ich glaube nicht, dass aws-cognito-identity noch als Modul existiert.Nachricht AWSCognito.CognitoIdentityServiceProvider.CognitoUserPool keine Funktion in AWS Lambda

Ich habe aws-sdk installiert, aber die Funktion AWSCognito.CognitoIdentityServiceProvider.CognitoUserPool existiert nicht im SDK.

durch die Art und Weise, hier ist mein Code in Lambda:

'use strict'; 
var AWS= require('aws-sdk'); 


AWS.config.region = 'ap-northeast-1'; // Region 
AWS.config.credentials = new AWS.CognitoIdentityCredentials({ 
    IdentityPoolId: 'ap-northeast-1:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx' // your identity pool id here 
}); 

// Need to provide placeholder keys unless unauthorised user access is enabled for user pool 
//AWSCognito.config.update({accessKeyId: 'anything', secretAccessKey: 'anything'}) 

var poolData = { 
    UserPoolId : 'us-east-1_xxxxxxxxx', 
    ClientId : 'xxxxxxxxxxxxxxxxxxxxxxxxx' 
}; 
var userPool = new AWS.CognitoIdentityServiceProvider.CognitoUserPool(poolData); 

module.exports.handler = function(event, context, cb) { 

var attributeList = []; 
var email = event.email; 
var username=event.username; 
var password = event.password; 

var dataEmail = { 
    Name : 'email', 
    Value : email 
}; 
var dataPhoneNumber = { 
    Name : 'phone_number', 
    Value : '+15555555555' 
}; 
var attributeEmail = new AWS.CognitoIdentityServiceProvider.CognitoUserAttribute(dataEmail); 
var attributePhoneNumber = new AWS.CognitoIdentityServiceProvider.CognitoUserAttribute(dataPhoneNumber); 

attributeList.push(attributeEmail); 
attributeList.push(attributePhoneNumber); 

userPool.signUp(username, password, attributeList, null, function(err, result){ 
    if (err) { 
     alert(err); 
     return; 
    } 
    username = result.user; 
} 
); return cb(null, username); 
}; 

und hier ist die Fehlermeldung erhalte ich, wenn die Funktion Lambda Prüfung:

{ 
    "errorMessage": "AWS.CognitoIdentityServiceProvider.CognitoUserPool is not a function", 
    "errorType": "TypeError", 
    "stackTrace": [ 
    "Module._compile (module.js:409:26)", 
    "Object.Module._extensions..js (module.js:416:10)", 
    "Module.load (module.js:343:32)", 
    "Function.Module._load (module.js:300:12)", 
    "Module.require (module.js:353:17)", 
    "require (internal/module.js:12:17)" 
    ] 
} 
+0

Versuchen Sie diesen Befehl "npm installieren -g" und dann – error2007s

+0

überprüfen, die nicht so gut funktionieren:

Beachten Sie, dass Sie haben

const attributeEmail = new AWS.CognitoIdentityServiceProvider.CognitoUserAttribute(dataEmail); 

ändern. Das Problem ist, dass die Funktion selbst nicht innerhalb des aws-sdk Quellcodes für Javascript gefunden wird. Ich kann es in der Datei amazon-cognito-identity.min.js sehen. Ich denke, dass ich dieses Bit in meinen Code kopieren kann, aber es fühlt sich nicht an, als wäre es die richtige Lösung. –

+3

hat gerade festgestellt, dass die serverseitige Implementierung noch nicht verfügbar ist bis GA: https://forums.aws.amazon.com/thread.jspa?threadID=233825&tstart=0 –

Antwort

1

Ich hatte auch das gleiche Problem , ich habe gerade diese unglaubliche Repo:

https://github.com/kndt84/amazon-cognito-identity-js und das dazugehörige npm Paket:

https://www.npmjs.com/package/amazon-cognito-identity-js-node

Es funktioniert. Gute Lösung für den Moment (Juli 2017), während wir auf die Veröffentlichung der allgemeinen Verfügbarkeit von Cognito warten, wo dies in AWS behoben wird (einige Leute haben das Problem seit Oktober 2016 konfrontiert).

npm install amazon-cognito-identity-js-node 

und

var AWS = require('aws-sdk'); 
var CognitoSDK = require('amazon-cognito-identity-js-node'); 
AWS.CognitoIdentityServiceProvider.AuthenticationDetails = CognitoSDK.AuthenticationDetails; 
AWS.CognitoIdentityServiceProvider.CognitoUserPool = CognitoSDK.CognitoUserPool; 
AWS.CognitoIdentityServiceProvider.CognitoUser = CognitoSDK.CognitoUser; 

Sie können das gleiche auch für andere Gegenstände wie CognitoUserAttribute tun.

const attributeEmail = new AWS.CognitoIdentityServiceProvider.CognitoUserAttribute(dataEmail.Name, dataEmail.Value);