2017-02-15 101 views
0

我试图使用在AWS中的Node.js中编写的Lambda函数来验证用户。我现在卡住了。 预期下面的代码不起作用:如何使用Lambda函数和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); 
 
     }, 
 

 
    }); 
 

 
};

以上是Cognito Documentation page

提供的代码,但我得到的是以下错误:

TypeError: AWS.CognitoIdentityServiceProvider.AuthenticationDetails is not a function 

有人对我现在应该做什么有一些想法吗? 谢谢

回答

1

您正在使用AWSCognito但未定义。将其更改为AWS

您是否正在为cognito编写包装?您可以在客户端而不是在Lambda中执行此身份验证。

+0

嗨@doorstuck,我已经更改为AWS,但我得到了同样的错误。至于包装,我不确定,我是一个新手。我所做的只是在第一行代码中声明这个“var AWS = require('aws-sdk');”。我刚刚编码内联,并没有上传任何文件。我应该上传任何图书馆吗? – blackjack

+1

@blackjack我试图弄清楚为什么你在后端编写这个登录代码,而不是在客户端。通常情况下,我会将您拥有的代码写入客户端,然后使用从其获取的凭据来调用其他AWS资源。您甚至可以使用您在客户端获得的凭据来调用API网关并验证请求。这是构建到API网关。 您可以更新您的代码示例并更改为AWS.CognitoIdentityServiceProvider.AuthenticationDetails。 – doorstuck

+0

我很害怕我走错了路。我正尝试构建一个使用lambda的无服务器体系结构来管理所有用户身份验证和注册流程(登录,重置密码,确认以及其他)。我会更改代码并给客户一些责任。我将尝试了解AWS API Gateway如何验证客户端凭据。 – blackjack

相关问题