2016-06-28 97 views
4

我正在嘗試在AWS Lambda函數中使用AWS Cognito用戶池。我在教程中看到,您需要在代碼中包含amazon-cognito-identity.min.js,但我不確定如何在節點js中執行此操作。我使用npm install作爲外部模塊,但我不認爲aws-cognito-identity作爲一個模塊存在。message AWSCognito.CognitoIdentityServiceProvider.CognitoUserPool不是aws lambda中的函數

我安裝了aws-sdk,但函數AWSCognito.CognitoIdentityServiceProvider.CognitoUserPool在SDK中不存在。

順便說一下,這是我在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); 
}; 

,這裏是測試lambda函數時,我收到錯誤消息:

{ 
    "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

試試這個命令「故宮安裝-g」,然後檢查 – error2007s

+0

未正常工作。問題在於,在JavaScript的aws-sdk源代碼中找不到函數本身。我可以在amazon-cognito-identity.min.js文件中看到它。我在想,我可以將這一點複製到我的代碼中,但它並不認爲這是正確的解決方案。 –

+3

剛剛發現服務器端實現尚未可用,直到GA:https://forums.aws.amazon.com/thread.jspa?threadID=233825&tstart=0 –

回答

1

我也有同樣的問題,我剛剛發現這個令人難以置信的回購:

https://github.com/kndt84/amazon-cognito-identity-js 和相關的NPM包:

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

它的工作原理。現在(2017年7月)的良好解決方案,同時等待Cognito的通用版本發佈,這將在AWS中解決(有些人自2016年10月以來一直面臨此問題)。

npm install amazon-cognito-identity-js-node 

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; 

你也可以做其他項目,如CognitoUserAttribute一樣。

注意,您將不得不改變

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

到:

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