amazon-web-services - Cognito 用户更新属性出现错误 - 错误:用户未通过身份验证
问题描述
我收到错误:更新用户属性时用户未通过身份验证错误。如果这不是更新的方式,请分享更新的方式。我提到了https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateUserAttributes.html,但不明白。
更新代码
function update(username, password) {
try {
var attributeList = [];
attributeList.push(new AmazonCognitoIdentity.CognitoUserAttribute({
Name: "custom:role",
Value: "some new value"
}));
var authenticationDetails = new AmazonCognitoIdentity.AuthenticationDetails({
Username: username,
Password: password,
});
var userPool = new AmazonCognitoIdentity.CognitoUserPool(poolData);
var userData = {
Username: username,
Pool: userPool
};
var cognitoUser = new AmazonCognitoIdentity.CognitoUser(userData);
cognitoUser.updateAttributes(attributeList, (err, result) => {
if (err) {
console.log("\n\n\n\nUpdate Error: ", err, "\n\n\n");
} else {
console.log(result);
}
});
} catch (e) {
console.log("\n\n\n\nCommon Error", e, "\n\n\n");
}
}
此处出错
Update Error: Error: User is not authenticated
at CognitoUser.updateAttributes (C:\Users\Kiran\Documents\Projects\Rentals-Backend\node_modules\amazon-cognito-identity-js\lib\CognitoUser.js:1040:23)
at update (C:\Users\Kiran\Documents\Projects\Rentals-Backend\models\user.js:94:21)
at C:\Users\Kiran\Documents\Projects\Rentals-Backend\models\user.js:33:9
at new Promise (<anonymous>)
at Object.exports.signIn (C:\Users\Kiran\Documents\Projects\Rentals-Backend\models\user.js:32:12)
at exports.signIn (C:\Users\Kiran\Documents\Projects\Rentals-Backend\controllers\user.js:12:11)
at Layer.handle [as handle_request] (C:\Users\Kiran\Documents\Projects\Rentals-Backend\node_modules\express\lib\router\layer.js:95:5)
at next (C:\Users\Kiran\Documents\Projects\Rentals-Backend\node_modules\express\lib\router\route.js:137:13)
at Route.dispatch (C:\Users\Kiran\Documents\Projects\Rentals-Backend\node_modules\express\lib\router\route.js:112:3)
at Layer.handle [as handle_request] (C:\Users\Kiran\Documents\Projects\Rentals-Backend\node_modules\express\lib\router\layer.js:95:5)
at C:\Users\Kiran\Documents\Projects\Rentals-Backend\node_modules\express\lib\router\index.js:281:22
at Function.process_params (C:\Users\Kiran\Documents\Projects\Rentals-Backend\node_modules\express\lib\router\index.js:335:12)
at next (C:\Users\Kiran\Documents\Projects\Rentals-Backend\node_modules\express\lib\router\index.js:275:10)
at urlencodedParser (C:\Users\Kiran\Documents\Projects\Rentals-Backend\node_modules\body-parser\lib\types\urlencoded.js:82:7)
at Layer.handle [as handle_request] (C:\Users\Kiran\Documents\Projects\Rentals-Backend\node_modules\express\lib\router\layer.js:95:5)
at trim_prefix (C:\Users\Kiran\Documents\Projects\Rentals-Backend\node_modules\express\lib\router\index.js:317:13)
at C:\Users\Kiran\Documents\Projects\Rentals-Backend\node_modules\express\lib\router\index.js:284:7
at Function.process_params (C:\Users\Kiran\Documents\Projects\Rentals-Backend\node_modules\express\lib\router\index.js:335:12)
at next (C:\Users\Kiran\Documents\Projects\Rentals-Backend\node_modules\express\lib\router\index.js:275:10)
at C:\Users\Kiran\Documents\Projects\Rentals-Backend\node_modules\body-parser\lib\read.js:130:5
at invokeCallback (C:\Users\Kiran\Documents\Projects\Rentals-Backend\node_modules\raw-body\index.js:224:16)
at done (C:\Users\Kiran\Documents\Projects\Rentals-Backend\node_modules\raw-body\index.js:213:7)
at IncomingMessage.onEnd (C:\Users\Kiran\Documents\Projects\Rentals-Backend\node_modules\raw-body\index.js:273:7)
at IncomingMessage.emit (events.js:375:28)
at IncomingMessage.emit (domain.js:470:12)
at endReadableNT (internal/streams/readable.js:1317:12)
at processTicksAndRejections (internal/process/task_queues.js:82:21)
解决方案
您应该在调用 updateAttributes 之前对用户进行身份验证
cognitoUser.authenticateUser(
https://docs.aws.amazon.com/cognito/latest/developerguide/authentication.html
// Amazon Cognito creates a session which includes the id, access, and refresh tokens of an authenticated user.
var authenticationData = {
Username : 'username',
Password : 'password',
};
var authenticationDetails = new AmazonCognitoIdentity.AuthenticationDetails(authenticationData);
var poolData = { UserPoolId : 'us-east-1_ExaMPle',
ClientId : '1example23456789'
};
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);
},
});
推荐阅读
- html - 如何做按钮平行
- excel - 自动调用 Sub
- android - 获取列表计数然后更新列表视图中的标题
- regex - 使用 sed 捕获两个下划线之间的字符串部分
- elixir - Supervisor.restart_child/2 还是 Process.exit(pid, :kill)?
- python - 如何通过 Actionchains send_keys 像人类一样打字
- java - Java Long 数据类型在 oracle 中转换为 bigint 类型
- javascript - 推入一个新数组并过滤javascript中的冗余对象
- elasticsearch - Elasticsearch 嵌套类型有风险吗?
- sql - 从 varchar 转换为 date 不从数据库返回值