关于AWS Amplify Gen 1与Gen 2的差异及注册用户列表获取的咨询
AWS Amplify Gen 1 与 Gen 2 对比及用户列表获取指南
一、Gen 1 与 Gen 2 语法、新特性对比
语法差异
- 资源定义方式
Gen 1:依赖CLI交互式命令生成amplify/backend下的JSON/YAML配置文件,比如创建Auth资源得跑amplify add auth一步步选配置项。
Gen 2:用TypeScript编写amplify/backend.ts,直接在代码里定义所有后端资源,示例:import { defineBackend } from '@aws-amplify/backend'; import { auth } from './auth/resource'; import { data } from './data/resource'; defineBackend({ auth, data }); - Auth资源配置
Gen 1:在amplify/backend/auth/<auth-name>/parameters.json里手动配置用户池属性(比如邮箱验证开关),改完得重新部署生效。
Gen 2:直接在TypeScript代码里定义Auth规则,示例:import { defineAuth } from '@aws-amplify/backend'; export const auth = defineAuth({ loginWith: { email: true }, userAttributes: { profilePicture: { mutable: true, required: false } } }); - Data资源(API)配置
Gen 1:通过amplify add api选择GraphQL,生成schema.graphql文件后用@model等transform指令配置数据模型,再跑amplify push部署。
Gen 2:用TypeScript定义数据模型并集成到后端代码,示例:import { defineData } from '@aws-amplify/backend'; import { schema } from './schema'; export const data = defineData({ schema, authorizationModes: { defaultAuthorizationMode: 'userPool' } });
新特性差异
- 代码优先开发:Gen 2全程用TypeScript编写后端逻辑,和前端代码风格统一,自带类型检查,能提前发现配置错误。
- 本地沙箱预览:支持
amplify sandbox命令,快速启动本地后端环境,实时预览资源变更,不用每次都部署到AWS。 - 自动依赖管理:在代码里直接关联Auth、Data等资源,系统自动处理资源间的权限依赖,不用手动配置。
- 灵活自定义逻辑:可以直接在后端代码里添加Lambda触发器、自定义resolver,比如给Auth加post-signup触发器:
export const auth = defineAuth({ // 其他配置 triggers: { postSignUp: { function: defineFunction({ entry: './post-signup.ts' }) } } }); - 简洁项目结构:所有后端定义集中在
amplify/backend的TypeScript文件里,替代Gen 1分散的JSON/YAML配置,项目结构更清晰。
二、获取应用中的注册用户列表
方法1:AWS CLI
确保已配置AWS CLI并拥有用户池的访问权限,运行以下命令:
aws cognito-idp list-users --user-pool-id <你的用户池ID>
可添加过滤参数缩小范围,比如只看已验证邮箱的用户:
aws cognito-idp list-users --user-pool-id <你的用户池ID> --filter "email_verified = true"
方法2:Amplify Admin UI
- 打开Amplify Console,进入你的应用。
- 点击左侧导航栏的
Authentication。 - 切换到
Users标签页,就能查看所有注册用户,还支持搜索、筛选、导出操作。
方法3:代码中获取(后端推荐)
在Lambda等后端环境中,用AWS SDK for JavaScript调用:
import { CognitoIdentityProviderClient, ListUsersCommand } from "@aws-sdk/client-cognito-identity-provider"; const client = new CognitoIdentityProviderClient({ region: '你的AWS区域' }); export const getRegisteredUsers = async () => { const command = new ListUsersCommand({ UserPoolId: '你的用户池ID' }); const response = await client.send(command); return response.Users; };
注意:不要在前端直接调用该接口(会暴露敏感权限),建议通过后端Lambda中转获取用户列表。
内容的提问来源于stack exchange,提问作者Sandeep J Patel
相关产品推荐
相关产品推荐

