You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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身份。

验证注意事项

  1. 确保Amplify项目已在控制台或配置文件中启用apiKey和userPool两种授权类型。
  2. 环境变量AMPLIFY_API_KEY需正确配置为你的Amplify API公钥。

内容的提问来源于stack exchange,提问作者Matthew Russo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 01:30:10