到处都是成堆的文件,真的让我大吃一惊。我使用的是amazoncognito identity js包,但我也发现AWS Amplify的资源与amazoncognito identity js完全不同,尽管这个包是
"part of amplify"
.
我目前有登录,注册,并确认用户完成和工作。
var AmazonCognitoIdentity = require('amazon-cognito-identity-js');
var pool = {
UserPoolId : 'pool-id',
ClientId : 'client-id'
};
var userPool = new AmazonCognitoIdentity.CognitoUserPool(pool);
var cognitoSignUp = (body, attributeList) => new Promise((acc, rej) => {
userPool.signUp(body.email, body.password, attributeList, null, function(err, res) {
if (err) {
rej(err);
} else {
acc(res);
}
});
});
var cognitoSignIn = (body) => new Promise((acc, rej) => {
var authData = {
Username: body.email,
Password: body.password
}
var authenticationDetails = new AmazonCognitoIdentity.AuthenticationDetails(authData);
var userData = {
Username: body.email,
Pool: userPool
};
var cognitoUser = new AmazonCognitoIdentity.CognitoUser(userData);
cognitoUser.authenticateUser(authenticationDetails, {
onSuccess: function(res) {
acc(res);
},
onFailure: function(err) {
rej(err);
}
});
});
我的下一步是确保lambdaapi端点的安全。这是我的困难时期。
我已经浏览了这些资源,了解如何在服务器上获取当前用户,验证用户是否经过身份验证,以及如何保护api。
通过这项研究,我发现了两种验证当前用户的方法
-
手动验证令牌
-
验证会话(取自上述第4个链接)
const AccessToken = new CognitoAccessToken({ AccessToken: tokens.accessToken });
const IdToken = new CognitoIdToken({ IdToken: tokens.idToken });
const RefreshToken = new CognitoRefreshToken({ RefreshToken: tokens.refreshToken });
const sessionData = {
IdToken: IdToken,
AccessToken: AccessToken,
RefreshToken: RefreshToken
};
const userSession = new CognitoUserSession(sessionData);
const userData = {
Username: email,
Pool: this.userPool
};
const cognitoUser = new CognitoUser(userData);
cognitoUser.setSignInUserSession(userSession);
cognitoUser.getSession(function (err, session) { // You must run this to verify that session (internally)
if (session.isValid()) {
// Update attributes or whatever else you want to do
} else {
// TODO: What to do if session is invalid?
}
});
我发现了两种保护API的方法
amazon-cognito-identity-js
它甚至没有讨论cognito返回的令牌或如何使用它们,它只是一个客户端实现。我在这上面找到的所有例子都在其他用户创建的博客上。
有没有人有任何使用lambda的cognito用户池的指南或完整的例子?
谢谢你