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

Amplify GraphQL DataStore动态组认证groupsField失效求助

排查与解决步骤

1. 清除DataStore本地缓存

DataStore会缓存本地数据,可能之前的无权限数据仍留存缓存中,导致你看到的是旧数据。可以通过以下方式处理:

  • 移动端直接卸载重装App
  • 在代码中调用DataStore.clear()方法,之后重新触发同步

2. 明确认证规则的操作范围

你的@auth规则未指定operations,默认允许所有操作,但明确指定操作类型能避免潜在的规则模糊问题,修改模型如下:

type Thing @model @auth(rules: [
    { allow: groups, groupsField: "tenant", operations: [read] }
]) {
  id: ID!
  tenant: String @default(value: "admin")
}

修改完成后重新部署API与DataStore模型。

3. 验证AppSync resolver逻辑

动态组认证的核心依赖AppSync生成的resolver,可通过AppSync控制台手动校验:

  1. 获取目标用户的JWT令牌,在查询Headers中添加Authorization: Bearer <令牌内容>
  2. 执行listThings查询,检查返回结果是否仅包含对应用户cognito:groups中tenant的记录
  • 若此处返回正确,问题大概率在DataStore同步配置;若仍返回所有数据,需重新部署模型确保CLI生成的resolver逻辑正确

4. 升级Amplify CLI到稳定版

旧版本CLI可能存在动态组认证的已知bug,先升级CLI:

npm install -g @aws-amplify/cli

再重新推送模型:

amplify push

5. 检查DataStore初始化配置

确保未通过自定义syncExpression覆盖认证规则的过滤逻辑,比如不要写类似以下代码:

// 错误示例:会跳过认证规则的权限校验
DataStore.configure({
  syncExpression: (model) => model.id.ne(null)
});

让DataStore默认使用@auth规则的过滤逻辑即可,无需额外自定义同步表达式。

6. 确认Cognito用户groups字段格式

确保用户的cognito:groups是数组类型且包含正确的tenant字符串,可通过代码打印验证:

Auth.currentAuthenticatedUser().then(user => {
  console.log(user.signInUserSession.idToken.payload['cognito:groups']);
});

确认输出为类似["your-tenant"]的数组格式,而非字符串或其他异常格式。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 17:52:10