![](/img/trans.png)
[英]AWS Cognito: Getting error in Auth.signIn (Validate that amazon-cognito-identity-js has been linked)
[英]Getting Cognito User custom attributes with amazon-cognito-identity.min.js
我有一個使用 amazon-cognito-identity.min.js 的 Cognito 用戶身份驗證。 登錄,獲取 jwt 令牌就可以了。 現在我想獲取用戶自定義屬性,但無法正常工作 - 我收到錯誤“用戶未被授權”。 我發現我應該使用 cognitoUser.getUserAttributes(),但這似乎不起作用。
var userPoolId = 'eu-west-1_xxxxxxxx'
var clientId = 'yyyyyyyyyyyyyyyyyyyyyyyyyy'
var poolData = { UserPoolId : userPoolId,
ClientId : clientId
};
var userPool = new AmazonCognitoIdentity.CognitoUserPool(poolData);
function login(){
var username = $('#username').val();
var authenticationData = {
Username: username,
Password: $('#password').val()
};
console.log("Username:",username, "Password:",$('#password').val())
var authenticationDetails = new AmazonCognitoIdentity.AuthenticationDetails(authenticationData);
var userData = {
Username : username,
Pool : userPool
};
var cognitoUser = new AmazonCognitoIdentity.CognitoUser(userData);
console.log(cognitoUser);
cognitoUser.authenticateUser(authenticationDetails, {
onSuccess: function (result) {
console.log(result)
var accessToken = result.getAccessToken().getJwtToken();
cognitoUser.getUserAttributes(function(err, result) {
if (err) {
alert(err.message || JSON.stringify(err));
return;
}
custom_attribute = result[4].getValue();
console.log(custom_attribute);
return custom_attribute;
});
localStorage;
localStorage.setItem("accessToken", accessToken);
localStorage.setItem("custom_attribute", custom_attribute);
window.location = './index.html';
},
onFailure: function(err) {
console.log("failed to authenticate");
console.log(JSON.stringify(err))
alert("Failed to Log in.\nPlease check your credentials.")
},
});
}
function checkLogin(redirectOnRec, redirectOnUnrec){
var cognitoUser = userPool.getCurrentUser();
if (cognitoUser != null) {
if (redirectOnRec) {
window.location = './index.html';
} else {
$("#body").css({'visibility':'visible'});
}
} else {
if (redirectOnUnrec) {
window.location = './signin.html'
}
}
}
function logOut() {
var cognitoUser = userPool.getCurrentUser();
console.log(cognitoUser, "signing out...")
cognitoUser.signOut();
window.location = './signin.html';
}
var idKey = 'cognito-idp.ap-southeast-2.amazonaws.com/' + userPoolId
var cognitoUser = userPool.getCurrentUser();
這是我觸發它的 index.html 部分:
<script type="text/javascript">
$(function () {
checkLogin(false, true)
})
window.onload = function () {
checkLogin(false, true)
localStorage;
var token = localStorage.getItem("accessToken");
}
</script>
你能建議我該怎么做嗎?
看來您要么需要指定您嘗試從中獲取自定義屬性的用戶名:
cognitoUser.username = '<username>';
或者,您需要遍歷池中的用戶以找出他們的用戶並動態分配和getUserAttributes
:
// List the users in the user pool
userPool.listUsers((err, users) => {
if (err) {
// Handle error
} else {
// Loop through the list of users
users.forEach(user => {
// Get the user's custom attributes
user.getUserAttributes((err, attributes) => {
if (err) {
// Handle error
} else {
// Print the user's custom attributes
console.log(attributes);
}
});
});
}
});
所以我通過將獲取屬性與登錄分開來弄清楚。
我添加了以下功能:
function login(){
var username = $('#username').val();
var authenticationData = {
Username: username,
Password: $('#password').val()
};
console.log("Username:",username, "Password:",$('#password').val())
var authenticationDetails = new AmazonCognitoIdentity.AuthenticationDetails(authenticationData);
var userData = {
Username : username,
Pool : userPool
};
var cognitoUser = new AmazonCognitoIdentity.CognitoUser(userData);
console.log(cognitoUser);
cognitoUser.authenticateUser(authenticationDetails, {
onSuccess: function (result) {
console.log(result)
var accessToken = result.getAccessToken().getJwtToken();
localStorage;
localStorage.setItem("accessToken", accessToken);
window.location = './index.html';
},
onFailure: function(err) {
console.log("failed to authenticate");
console.log(JSON.stringify(err))
alert("Failed to Log in.\nPlease check your credentials.")
},
});}
function getUserAttributes(){
var cognitoUser = userPool.getCurrentUser();
let machine_id = '';
if (cognitoUser != null) {
cognitoUser.getSession(function (err, session) {
cognitoUser.getUserAttributes(function(err, result) {
if (err) {
console.log(err);
return;
}
for (let i = 0; i < result.length; i++) {
if (result[i].getName() === 'custom:attr_id') {
attr_id = result[i].getValue();
console.log(attr_id);
localStorage;
localStorage.setItem("attr_id", attr_id);
}
}
else {
console.log(result[i].getValue());
}
}
});
});
}}
然后我按這個順序調用它:
<script type="text/javascript">
window.onload = function () {
checkLogin(false, true);
getUserAttributes();
localStorage;
var attr = localStorage.getItem("attr_id");
}
</script>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.