gpt4 book ai didi

javascript - 从浏览器 JS 对 AWS Cognito 用户池进行身份验证

转载 作者:行者123 更新时间:2023-12-04 09:15:03 24 4
gpt4 key购买 nike

我正在构建概念验证 Web 应用程序,并希望使用 AWS Cognito 用户池作为我的用户身份验证机制。我已经配置了一个用户池和一个客户端应用程序。我已经使用托管 UI 注册了一个测试用户。现在我需要从浏览器验证该用户。
我在 AWS 文档( herehere )中发现了两个示例,它们展示了如何使用基于浏览器的 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”。
这是我的第二次尝试,使用 https://docs.aws.amazon.com/cognito/latest/developerguide/authentication.html 中的代码示例:
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”。
我一直在追我的尾部,到目前为止还没有找到解决方案。我非常想避免转向 Amplify 框架。这带来了我宁愿避免的新框架的陡峭学习曲线的成本,至少现在是这样。另外,我不是一个JS程序员,当然也不是一个node程序员,所以我也必须爬上学习node.js的山才能转向Amplify。
是否可以在不使用 Amplify 的情况下使用简单的客户端 Javascript 对用户进行身份验证?如果是这样,我将非常感谢一个完整的工作示例(或有人指出我做错了什么。)

最佳答案

对于遇到此问题的任何人,我找到了解决方案。这是否是正确的解决方案,我不知道。祝大家好运:

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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com