

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 管理和搜索用户账户
<a name="how-to-manage-user-accounts"></a>

用户池可以包含数百万个用户。对于管理员来说，使用这种规模的数据集是一项挑战。Amazon Cognito 提供了用于查找和修改用户配置文件的工具。查找用户的主要方法是 Amazon Cognito 控制台的 “**用户**” 菜单，以及。[ListUsers](https://docs.amazonaws.cn/cognito-user-identity-pools/latest/APIReference/API_ListUsers.html)在检索用户信息的方法中，这些选项不会像例如那样对成本产生影响[AdminGetUser](https://docs.amazonaws.cn/cognito-user-identity-pools/latest/APIReference/API_AdminGetUser.html)。

本指南的这一部分包含有关在用户池中查找和更新用户配置文件的信息。

## 查看用户属性
<a name="manage-user-accounts-viewing-user-attributes"></a>

请使用以下过程在 Amazon Cognito 控制台中查看用户属性。

**查看用户属性**

1. 转到 [Amazon Cognito 控制台](https://console.amazonaws.cn/cognito/home)。如果出现提示，请输入您的 Amazon 凭据。

1. 选择 **User Pools**（用户池）。

1. 从列表中选择现有用户池。

1. 选择**用户**菜单，然后在列表中选择用户。

1. 在用户详细信息页面，您可以在 **User attributes**（用户属性）中查看哪些属性与用户关联。

## 重置用户的密码
<a name="manage-user-accounts-reset-user-password"></a>

请使用以下过程在 Amazon Cognito 控制台重置用户的密码。

**重置用户的密码**

1. 转到 [Amazon Cognito 控制台](https://console.amazonaws.cn/cognito/home)。如果出现提示，请输入您的 Amazon 凭据。

1. 选择 **User Pools**（用户池）。

1. 从列表中选择现有用户池。

1. 选择**用户**菜单，然后在列表中选择用户。

1. 在用户详细信息页面上，选择 **Actions**（操作）、**Reset password**（重置密码）。

1. 在 **Reset password**（重置密码）对话框中，查看信息，准备就绪后，选择 **Reset**（重置）。

   该操作会立即导致向用户发送确认代码，并通过将用户状态更改为 `RESET_REQUIRED` 来禁用用户的当前密码。**Reset password**（重置密码）代码的有效期为 1 小时。

## 启用、禁用和删除用户账户
<a name="manage-user-accounts-enable-disable"></a>

您可以删除未使用的用户配置文件，或者如果您想临时阻止访问，可将其禁用。用户可以删除自己的账户，但只有用户池管理员才能启用和禁用用户账户。

**删除的影响**  
用户无法使用已删除的用户账户登录，要重新获得访问权限，必须注册或重新创建用户。

**禁用账户的影响**  
当您禁用用户账户时，Amazon Cognito 会自动使所有经过身份验证的会话失效，停用用户账户的登录，并[撤销他们的访问权限和刷新令牌](token-revocation.md)。当用户尝试登录您禁用的账户时，Amazon Cognito 会返回 `invalid_request` 错误及 `User is not enabled` 消息。这种行为不会随着应用程序客户端的[用户存在披露设置](cognito-user-pool-managing-errors.md)而改变。您可以禁用本地用户账户和联合用户账户的本地配置文件。当用户通过托管登录或经典的托管 UI 登录，然后您禁用其账户，在他们尝试使用维护其经过身份验证的会话的浏览器 Cookie 再次登录时，Amazon Cognito 会将他们重定向到登录页面。

**启用账户的影响**  
启用账户后，用户可以立即登录账户。默认情况下，用户账户处于启用状态。用户的属性和密码与其账户被禁用之前相同。无论您是禁用用户账户还是单独撤销刷新令牌，您的应用程序撤销的令牌在您启用拥有该令牌的用户账户后都将保持无效。

------
#### [ Delete a user account (console) ]

**删除用户账户**

1. 转到 [Amazon Cognito 控制台](https://console.amazonaws.cn/cognito/home)。如果出现提示，请输入您的 Amazon 凭据。

1. 选择 **User Pools**（用户池）。

1. 从列表中选择现有用户池。

1. 选择**用户**菜单，然后选中列表中用户名旁边的单选按钮。

1. 选择**删除**。

1. 选择**禁用用户访问**。

1. 选择**删除**。

------
#### [ Delete a user account (API) ]

用户可以通过自助服务 access-token-authorized [DeleteUser](https://docs.amazonaws.cn/cognito-user-identity-pools/latest/APIReference/API_DeleteUser.html)API 操作删除其账户。以下是一个示例 `DeleteUser` 请求正文。

```
{
   "AccessToken": "eyJra456defEXAMPLE"
}
```

管理员可以通过 IAM 授权的 [AdminDeleteUser](https://docs.amazonaws.cn/cognito-user-identity-pools/latest/APIReference/API_AdminDeleteUser.html)API 操作删除用户帐户。以下是一个示例 `AdminDeleteUser` 请求正文。

```
{
   "Username": "testuser",
   "UserPoolId": "us-west-2_EXAMPLE"
}
```

------
#### [ Disable a user account (console) ]

**禁用用户账户**

1. 转到 [Amazon Cognito 控制台](https://console.amazonaws.cn/cognito/home)。如果出现提示，请输入您的 Amazon 凭据。

1. 选择 **User Pools**（用户池）。

1. 从列表中选择现有用户池。

1. 选择**用户**菜单，然后在列表中选择用户的用户名。

1. 在用户详细信息页面上，选择**操作**、**禁用用户访问**。

1. 在由此创建的对话框中，选择**禁用**。

------
#### [ Disable a user account (API) ]

管理员可以通过 IAM 授权的 [AdminDisableUser](https://docs.amazonaws.cn/cognito-user-identity-pools/latest/APIReference/API_AdminDisableUser.html)API 操作禁用用户帐户。以下是一个示例 `AdminDisableUser` 请求正文。

```
{
   "Username": "testuser",
   "UserPoolId": "us-west-2_EXAMPLE"
}
```

------
#### [ Enable a user account (console) ]

**启用用户账户**

1. 转到 [Amazon Cognito 控制台](https://console.amazonaws.cn/cognito/home)。如果出现提示，请输入您的 Amazon 凭据。

1. 选择 **User Pools**（用户池）。

1. 从列表中选择现有用户池。

1. 选择**用户**菜单，然后在列表中选择用户的用户名。

1. 在用户详细信息页面上，选择**操作**、**启用用户访问**。

1. 在由此创建的对话框中，选择**启用**。

------
#### [ Enable a user account (API) ]

管理员可以通过 IAM 授权的 [AdminEnableUser](https://docs.amazonaws.cn/cognito-user-identity-pools/latest/APIReference/API_AdminEnableUser.html)API 操作启用用户帐户。以下是一个示例 `AdminEnableUser` 请求正文。

```
{
   "Username": "testuser",
   "UserPoolId": "us-west-2_EXAMPLE"
}
```

------

## 搜索用户属性
<a name="manage-user-accounts-searching-user-attributes"></a>

如果您已创建用户池，则可以在 Amazon Web Services 管理控制台的 **Users**（用户）面板中搜索。您也可以使用 Amazon Cognito [ListUsers API](https://docs.amazonaws.cn/cognito-user-identity-pools/latest/APIReference/API_ListUsers.html)，它接受**筛选**器参数。

您可以搜索以下任何标准属性。自定义属性不可搜索。
+ username（区分大小写）
+ email
+ phone\$1number
+ name
+ given\$1name
+ family\$1name
+ preferred\$1username
+ cognito:user\$1status（在控制台中称为**Status**（状态））（区分大小写）
+ status（在控制台中称为**Enabled**（已启用））（区分大小写）
+ sub

**注意**  
您还可以使用客户端筛选条件列出用户。服务器端筛选条件匹配的属性不超过 1 个。对于高级搜索，请使用客户端筛选条件，其中包含 Amazon Command Line Interface中 `list-users` 操作的 `--query` 参数。使用客户端筛选器时，会 ListUsers 返回零个或多个用户的分页列表。您可以连续接收多个结果为零的页面。对返回的每个分页令牌重复查询，直到您收到一个空的分页令牌值，然后查看合并结果。  
有关服务器端和客户端筛选的更多信息，请参阅《 Amazon Command Line Interface 用户指南》中的[筛选 Amazon CLI 输出](https://docs.amazonaws.cn/cli/latest/userguide/cli-usage-filter.html)。

## 使用搜索用户 Amazon Web Services 管理控制台
<a name="cognito-user-pools-manage-user-accounts-searching-for-users-using-console"></a>

如果您已创建用户池，则可以在 Amazon Web Services 管理控制台的 **Users**（用户）面板中搜索。

Amazon Web Services 管理控制台 搜索始终是前缀（“以” 开头）搜索。

**在 Amazon Cognito 控制台中搜索用户**

1. 转到 [Amazon Cognito 控制台](https://console.amazonaws.cn/cognito/home)。系统可能会提示您输入 Amazon 凭证。

1. 选择 **User Pools**（用户池）。

1. 从列表中选择现有用户池。

1. 选择**用户**菜单，然后在搜索字段中输入用户名。请注意，某些属性值区分大小写 [例如，**Username**（用户名）]。

   您还可以通过调整搜索筛选条件来查找用户，将范围缩小到其它用户属性，如 **Email**（电子邮件）、**Phone number**（电话号码）或 **Last name**（姓）。

## 使用 `ListUsers` API 搜索用户
<a name="cognito-user-pools-searching-for-users-using-listusers-api"></a>

 [要从您的应用程序中搜索用户，请使用亚马逊 Cognito ListUsers API。](https://docs.amazonaws.cn/cognito-user-identity-pools/latest/APIReference/API_ListUsers.html)此 API 使用以下参数：
+  `AttributesToGet`：一组字符串，其中每个字符串均为将针对搜索结果中的每位用户返回的用户属性的名称。要检索所有属性，请不要包含 `AttributesToGet` 参数或文本字符串值为 `null` 的请求 `AttributesToGet`。
+  `Filter`：筛选条件字符串，格式为 "`AttributeName` `Filter-Type` "`AttributeValue`""。筛选条件字符串中的引号必须使用反斜杠 (`\`) 字符进行转义。例如 `"family_name = \"Reddy\""`。如果筛选条件字符串为空，`ListUsers` 将返回用户池中的所有用户。
  +  `AttributeName`：要搜索的属性的名称。一次只能搜索一个属性。
**注意**  
您只能搜索标准属性。自定义属性不可搜索。这是因为只有索引属性可搜索，而自定义属性不可索引。
  +  `Filter-Type`：对于精确匹配，请使用 `=`，例如 `given_name = "Jon"`。对于前缀 (“starts with”) 匹配，请使用 `^=`，例如 `given_name ^= "Jon"`。
  +  `AttributeValue`：必须为每位用户匹配的属性值。
+  `Limit`：要返回的最大用户数。
+  `PaginationToken`：可从之前的搜索中获取更多结果的令牌。Amazon Cognito 会在一小时后让分页令牌过期。
+  `UserPoolId`：应对其执行搜索的用户池的用户池 ID。

所有搜索都区分大小写。搜索结果按以 `AttributeName` 字符串命名的属性进行升序排列。

## 使用 `ListUsers` API 的示例
<a name="cognito-user-pools-searching-for-users-listusers-api-examples"></a>

以下示例将返回所有用户并包括所有属性。

```
{
    "AttributesToGet": null,
    "Filter": "",
    "Limit": 10,
    "UserPoolId": "us-east-1_samplepool"
}
```

以下示例将返回电话号码以“\$11312”开头的所有用户并包括所有属性。

```
{
    "AttributesToGet": null,
    "Filter": "phone_number ^= \"+1312\"",
    "Limit": 10,
    "UserPoolId": "us-east-1_samplepool"
}
```

以下示例将返回姓氏为“Reddy”的前 10 位用户。对于每个用户，搜索结果包含用户的名字、电话号码和电子邮件地址。如果用户池中有 10 个以上相匹配的用户，则响应将包含一个分页标记。

```
{
    "AttributesToGet": [
        "given_name", 
        "phone_number", 
        "email"
    ],
    "Filter": "family_name = \"Reddy\"",
    "Limit": 10,
    "UserPoolId": "us-east-1_samplepool"
}
```

如果上一示例返回分页标记，则以下示例将返回与同一筛选条件字符串相匹配的接下来的 10 位用户。

```
{
    "AttributesToGet": [
        "given_name", 
        "phone_number", 
        "email"
    ],
    "Filter": "family_name = \"Reddy\"",
    "Limit": 10,
    "PaginationToken": "pagination_token_from_previous_search",
    "UserPoolId": "us-east-1_samplepool"
}
```