作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在构建概念验证 Web 应用程序,并希望使用 AWS Cognito 用户池作为我的用户身份验证机制。我已经配置了一个用户池和一个客户端应用程序。我已经使用托管 UI 注册了一个测试用户。现在我需要从浏览器验证该用户。
我在 AWS 文档( here 和 here )中发现了两个示例,它们展示了如何使用基于浏览器的 javascript 针对 Cognito 用户池对用户进行身份验证。我不能让任何一个为我工作。
这是我的最少代码演示 HTML(两个文本框和一个按钮):
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Test Page</title>
</head>
<body>
<input id="username" type="text" value="myUser"></input> <br>
<input id="password" type="password" value="myPa55w0rd!"></input> <br>
<button onclick="login()">Log In!</button>
<script src="https://sdk.amazonaws.com/js/aws-sdk-2.726.0.js"></script>
<script src="js/myscript.js"></script>
</body>
</html>
这是我的 myscript.js(版本 1,来自
https://aws.amazon.com/blogs/mobile/accessing-your-user-pools-using-the-amazon-cognito-identity-sdk-for-javascript/):
function login() {
AWS.config.region = "us-west-2";
var poolData = {
UserPoolId : 'us-west-2_redacted',
ClientId : 'abcdefghijklmnopqrstuvwxyz'
};
var userPool = new AWS.CognitoIdentityServiceProvider.CognitoUserPool(poolData); <--Error here
var authenticationData = {
Username : document.getElementById("username").value,
Password : document.getElementById("password").value
};
var authenticationDetails = new AWSCognito.CognitoIdentityServiceProvider.authenticationDetails(authenticationData);
var userData = {
Username : document.getElementById("username").value,
Pool: userPool
};
var cognitoUser = new AmazonCognito.CognitoIdentityServiceProvider.cognitoUser(userData);
cognitoUser.authenticateUser(authenticationDetails, {
onSuccess: function (result) {
var accessToken = result.getAccessToken().getJwtToken();
/* Use the idToken for Logins Map when Federating User Pools with identity pools or when passing through an Authorization Header to an API Gateway Authorizer */
var idToken = result.idToken.jwtToken;
alert("Authentication successful!");
},
onFailure: function(err) {
alert(err);
},
});
}
当我运行此代码时,我得到
Uncaught TypeError: AWS.CognitoIdentityServiceProvider.CognitoUserPool is not a constructor
在线
var userPool = new AWS.CognitoIdentityServiceProvider.CognitoUserPool(poolData);
.果然,我在 aws-sdk-2.726.0.js 文件中的任何地方都没有看到“CognitoUserPool”。
function login() {
var authenticationData = {
Username : document.getElementById("username").value,
Password : document.getElementById("password").value
}
var authenticationDetails = new AmazonCognitoIdentity.authenticationDetails(authenticationData); <-- Error here
var poolData = {
UserPoolId : 'us-west-2_redacted',
ClientId : 'abcdefghijklmnopqrstuvwxyz'
};
var userPool = new AmazonCognitoIdentity.CognitoUserPool(poolData);
var userData = {
Username : 'username',
Pool : userPool
};
var cognitoUser = new AmazonCognitoIdentity.CognitoUser(userData);
cognitoUser.authenticateUser(authenticationDetails, {
onSuccess: function (result) {
var accessToken = result.getAccessToken().getJwtToken();
/* Use the idToken for Logins Map when Federating User Pools with identity pools or when passing through an Authorization Header to an API Gateway Authorizer */
var idToken = result.idToken.jwtToken;
},
onFailure: function(err) {
alert(err);
},
});
}
当我运行这段代码时,我得到了 Uncaught
ReferenceError: AmazonCognitoIdentity is not defined
.果然,aws.sdk-2.726.0.js 文件中没有出现文本“AmazonCognitoIdentity”。
最佳答案
对于遇到此问题的任何人,我找到了解决方案。这是否是正确的解决方案,我不知道。祝大家好运:
function login() {
AWS.config.update({region : "us-west-2"});
const payload = {
AuthFlow: "USER_PASSWORD_AUTH",
ClientId: "abcdefghijklmnopqrstuvwxyz",
AuthParameters : {
USERNAME: document.getElementById('username').value,
PASSWORD: document.getElementById('password').value
}
}
var cognito = new AWS.CognitoIdentityServiceProvider();
cognito.initiateAuth(payload, function(err,data) {
if (err) {
alert("Error: " + err);
}
else {
alert("Success!");
}
})
}
关于javascript - 从浏览器 JS 对 AWS Cognito 用户池进行身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63266174/
我是一名优秀的程序员,十分优秀!