如何在我的 React 应用程序中列出我的 Cognito 用户池中的所有用户?

How do I list all users in my Cognito User Pool in my React application?

我有一个网站编辑可以登录的 CMS 应用程序。我想为编辑创建一个仪表板,以便能够创建和删除站点用户。站点用户帐户将通过 AWS Cognito 用户池维护,而站点编辑通过他们的帐户登录 CMS。

首先,我希望能够列出给定用户池中的所有用户以供编辑查看,因此我正在关注 SDK 文档 here,但它没有解释如何将任何凭据传递给该方法。这是 SDK 的 v3,我能找到的任何类似的例子都使用 v2.

我走到这一步:

import { CognitoIdentityProviderClient, ListUsersCommand } from "@aws-sdk/client-cognito-identity-provider";

const client = new CognitoIdentityProviderClient({ region: "eu-west-2" });
const params = {};
const command = new ListUsersCommand({ UserPoolId: "My_User_Pool_Id" });

try {
    const data = await client.send(command);
    return this.setState({ users: data });
} catch (error) {
    console.error(error);
    return this.setState({ error: error });
} finally {
    this.setState({ loading: false });
}

但是当我 运行 上述代码并呈现组件时,这给了我一个错误:

Error: Credential is missing
    at SignatureV4.credentialProvider (runtimeConfig.browser.js:15)
    at SignatureV4.<anonymous> (SignatureV4.js:169)
    at step (tslib.es6.js:100)
    at Object.next (tslib.es6.js:81)
    at tslib.es6.js:74
    at new Promise (<anonymous>)
    at __awaiter (tslib.es6.js:70)
    at SignatureV4.signRequest (SignatureV4.js:165)
    at SignatureV4.<anonymous> (SignatureV4.js:85)
    at step (tslib.es6.js:100)

我假设我需要为我的仪表板创建一些凭据(通过 IAM?)以访问用户池,但我不知道在哪里创建这些凭据或如何将它们传递给 SDK。谷歌搜索这个主题似乎建议我应该创建一个未经身份验证的 Identity 池并为其附加 IAM 权限,然后将该池的凭据传递给 SDK,但这也给了我权限错误:

AccessDeniedException: User: [DashboardAdmin IdentityPool ARN] is not authorized to perform: cognito-idp:ListUsers on resource: [UserPool for Site Users ARN]

我最终找到了有关获取和设置凭据的 v3 文档的正确部分。

您可以通过新的 IAM 用户为您的应用程序创建凭据来获取凭据,如 here 所述。

根据 this guide,您可以通过多种不同的方式将它们添加到您的应用程序中,具体取决于您是在服务器端还是在客户端工作。例如,在服务器端对它们进行硬编码需要进行以下更改:

const client = new CognitoIdentityProviderClient({ region: "eu-west-2" });

改为

const client = new CognitoIdentityProviderClient({
    region: "eu-west-2",
    credentials: {
        accessKeyId: process.env.YOUR_AWS_ACCESS_KEY_ID,
        secretAccessKey: process.env.YOUR_AWS_SECRET_ACCESS_KEY,
    },
});

然后,错误 User is not authorized to perform: cognito-idp:ListUsers on resource 通过向您在上面创建的 IAM 用户添加允许 cognito-idp:ListUsers 的策略来解决。 引导我朝着正确的方向前进。