javascript - 如何以管理员身份通过 Cognito SDK 更新用户属性

标签 javascript angular aws-sdk amazon-cognito

我正在创建一个 Angular 应用程序,我想在其中通过 AWS Cognito 添加身份验证(我是 AWS 的新手)。我成功地添加了注册、登录、注销、mfa 等功能。此外,我想创建类似管理面板的东西,管理员可以在其中更改一般用户的属性。但我不确定如何实现这些管理事项。管理员应如何登录?管理员应该如何注册?是否有专门的用户池?那么如何以admin的身份对普通用户进行管理(修改属性)呢?

我看过 AWS 文档,但还不够清楚。我看到有一些以 Admin 为前缀的操作,例如 AdminUpdateUserAttributes,但我不确定如何使用它们。

编辑:我试过这样的事情:

const AWS = require('aws-sdk');
let cognitoIdentityServiceProvider = new AWS.CognitoIdentityServiceProvider({apiVersion: '2016-04-18'});

let params = {
    UserAttributes: [{
        Name: 'custom:state',
        Value: this.newValue
    }],
    UserPoolId: 'us-east-1_example',
    Username: this.username
};
cognitoIdentityServiceProvider.adminUpdateUserAttributes(params, function(err, data) {
    // do something with result
    err && console.error(err);
    data && console.log(data);
});

但我收到以下错误:CredentialsError: Missing credentials in config

我应该如何设置这些凭据?

最佳答案

为了拥有admin 权限,您需要提供accessKeyIdsecretAccessKeyidToken。 一种方法是从 AWS 管理控制台获取这些 key 。它们可以从 IAM Angular 色中提取,该 Angular 色有权修改所需的用户池。 然后你可以这样做:

AWS.config.update({accessKeyId: '...', secretAccessKey: '...'});

我个人在我的应用程序中所做的是为管理员创建另一个用户池。然后我将这个用户池作为身份提供者添加到身份池中。然后我编辑了授权 IAM Angular 色,以便能够与普通用户一起编辑用户池。

以下对我有用:

const userPool = new CognitoUserPool({
  UserPoolId: this.adminUserPoolId,
  ClientId: this.adminClientId
});

const authenticationDetails = new AuthenticationDetails({
  Username: username,
  Password: password
});
const cognitoUser = new CognitoUser({
  Username: username,
  Pool: userPool
});
cognitoUser.authenticateUser(authenticationDetails, ....);

const jwt = cognitoUser.getSignInSession().getIdToken().getJwtToken();
const provider = `cognito-idp.${this.region}.amazonaws.com/${this.adminUserPoolId}`;

AWS.config.update({
  credentials: new CognitoIdentityCredentials({
    IdentityPoolId: this.identityPoolId,
    Logins: {
      [provider]: jwt // when you provide the jwt, accessKeyId and secretAccessKey are extracted
    }
 })
});

const identityService = new CognitoIdentityServiceProvider();
identityService.adminUpdateUserAttributes(...);

关于javascript - 如何以管理员身份通过 Cognito SDK 更新用户属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58462732/

相关文章:

javascript - Firefox 附加组件 api 中的 HTML 元素 Hook

javascript - 按最大长度拼接对象数组

javascript - 如何将 DOM 元素中的任何内容传递给 $scope 中定义的函数

javascript - 滑入/滑出目标元素的指令

angular - 停止 Angular2 倒计时

javascript - 单选按钮拦截 Angular/Javascript 中未经检查的事件

angular - 无法使用父命名路由器导出导航到嵌套/子路由

javascript - AWS Lambda 在执行在 s3 存储桶中保存多个文件的 forEach 循环后返回 'null'

amazon-web-services - 单独使用 AWS S3 或 S3 和 Cloudfront 进行视频下载

node.js - 如何生成可查看的s3 url nodejs