Gre*_*ner 5 amazon-web-services node.js npm amazon-cognito aws-lambda
我正在尝试在 Lambda 函数中使用 AWS Cognito 来授权用户。
我有一些来自 Udemy 课程的示例代码(不再可用):https ://www.udemy.com/minimum-viable-aws-cognito-user-auth-in-javascript
该代码使用脚本文件:
aws-cognito-sdk.min.js 亚马逊-cognito-identity.min.js
第二个似乎由 npm 提供:amazon-cognito-identity-js
第一个文件应该是 aws-sdk 的精简版,只有 Cognito api 组件。完整的 aws-sdk 可从 npm 获得:aws-sdk 但我在 npm 中找不到缩减版本。
缩减文件:aws-cognito-sdk.min.js 是否在 npm 中可用?
编辑:根据罗素的说法,我应该使用 aws-sdk 包。
所以如果我有代码:
const AWS = require('aws-sdk');
var authenticationDetails = new AWS.AWSCognito.CognitoIdentityServiceProvider.AuthenticationDetails(authenticationData);
Run Code Online (Sandbox Code Playgroud)
我收到错误:
无法读取未定义的属性“CognitoIdentityServiceProvider”
AuthenticationDetails 的正确路径是什么?
对于 Lambda,请aws-sdk
按如下方式使用该模块:
const { CognitoIdentityServiceProvider } = require('aws-sdk')
//or
const CognitoIdentityServiceProvider = require('aws-sdk/clients/cognitoidentityserviceprovider') // Much smaller size
Run Code Online (Sandbox Code Playgroud)
对于身份验证,请使用AdminInitiateAuth方法。
const cognitoProvider = new CognitoIdentityServiceProvider({
apiVersion: '2016-04-18',
accessKeyId:...
secretAccessKey: ...
region:...
})
await cognitoProvider.adminInitiateAuth(...)
Run Code Online (Sandbox Code Playgroud)
该amazon-cognito-identity-js
包适用于前端客户端(React、React Native 等)。它仅包含连接到 Cognito 所需的功能。它不需要该aws-sdk
模块(除非您需要额外的功能)。
虽然您可能能够amazon-cognito-identity-js
在您的用例中使用它,但这远非理想,因为与使用 api 密钥加载管理方法相比,您只是假装是功能有限的未经身份验证的用户,从而为您提供更多功能。
得到这个工作。
package.json 需要依赖项:
"amazon-cognito-identity-js": "^1.31.0",
"aws-sdk": "^2.182.0",
Run Code Online (Sandbox Code Playgroud)
AWS Lambda 不使用 Javascript ES6,因此您无法使用“import”关键字。
const AWS = require('aws-sdk');
var AmazonCognitoIdentity = require('amazon-cognito-identity-js');
var CognitoUserPool = AmazonCognitoIdentity.CognitoUserPool;
var AuthenticationDetails = AmazonCognitoIdentity.AuthenticationDetails;
var CognitoUser = AmazonCognitoIdentity.CognitoUser;
var poolData = {
UserPoolId: 'THE USER POOL ID',
ClientId: 'THE CLIENT ID'
};
var userPool = new CognitoUserPool(poolData);
AWS.config.region = 'AWS_REGION';
AWS.config.credentials = new AWS.CognitoIdentityCredentials({
IdentityPoolId: 'THE USERPOOL ID',
});
var email = "someone@somewhere.com";
var password = "password";
var authenticationData = {
Username: email,
Password: password
};
var authenticationDetails = new AuthenticationDetails(authenticationData);
var userData = {
Username: email,
Pool: userPool
};
var cognitoUser = new CognitoUser(userData);
console.log(result);
cognitoUser.authenticateUser(authenticationDetails, {
onSuccess: function (result) {
console.log('access token + ' + result.getAccessToken().getJwtToken());
callback(null, result);
},
onFailure: function (err) {
console.log('Login error: ' + err);
callback(null, result);
}
});
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
5714 次 |
最近记录: |