Amplify Gen2:如何在defineData中配置apiKey与userPool双授权模式?
解决Amplify Gen2同时配置apiKey与userPool授权模式的问题
你的数据模型已经正确定义了公开Log和私有User的授权规则,只需在defineData中完成两种授权模式的注册,并合理设置默认模式即可,完整配置如下:
完整代码示例
const schema = a.schema({ Log: a .model({ content: a.string(), createdBy: a.string() }) .authorization((allow) => [ allow.publicApiKey().to(['read']), allow.owner(), ]), User: a .model({ name: a.string(), bio: a.string() }) .authorization((allow) => [allow.owner()]) }); export type Schema = ClientSchema<typeof schema>; export const data = defineData({ schema, authorizationModes: { // 设userPool为默认授权模式,适配大部分需用户身份的操作 defaultAuthorizationMode: 'userPool', // 注册apiKey授权模式,填入你的API密钥(推荐从环境变量读取) apiKeyAuthorizationMode: { apiKey: process.env.AMPLIFY_API_KEY } }, });
核心说明
- 默认模式选择:选
userPool作为默认更合理,因为User模型仅支持owner访问,Log的写入操作也依赖用户身份;当请求Log的公开读权限时,Amplify会自动匹配模型的授权规则切换到apiKey模式。 - apiKey必须显式注册:即便模型中定义了
allow.publicApiKey(),也需要在authorizationModes里声明apiKeyAuthorizationMode并提供有效密钥,否则客户端无法使用apiKey授权。 - 自动匹配授权规则:客户端发起请求时,Amplify会根据模型的
authorization配置自动选用对应授权模式——比如读Log用apiKey,写Log或访问User用userPool身份。
验证注意事项
- 确保Amplify项目已在控制台或配置文件中启用
apiKey和userPool两种授权类型。 - 环境变量
AMPLIFY_API_KEY需正确配置为你的Amplify API公钥。
内容的提问来源于stack exchange,提问作者Matthew Russo
相关产品推荐
相关产品推荐

