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

使用Amplify + Cognito鉴权时如何在DynamoDB中关联Cognito用户?

Cognito与DynamoDB用户关联标准实现方案

核心关联逻辑选择Cognito用户的sub字段作为唯一主键,这是Cognito为每个用户生成的全局唯一、永久不可变的标识符,是该场景下的最优关联键,不存在用户名、邮箱、手机号这类可修改字段后续匹配失效的问题。你可以在前端通过Auth.currentAuthenticatedUser()获取当前用户的sub,后端可以解析Cognito签发的JWT payload直接拿到sub,不需要额外调用Cognito接口查询。

根据你的技术栈(已使用Amplify),优先推荐第一种实现路径:

路径1:Amplify原生自动关联(最适配当前技术栈,无需额外开发)

直接在Amplify的GraphQL schema中配置@auth规则即可实现自动关联、自动权限控制,示例schema代码如下:

type User 
  @model 
  @auth(rules: [{ allow: owner, ownerField: "id", identityClaim: "sub" }]) {
  id: ID! # Amplify会自动将该字段映射为Cognito用户的sub值,无需手动赋值
  nickname: String
  avatarUrl: String
  # 按需添加其他需要存储的自定义用户字段
}
  • 配置完成后执行amplify push,Amplify会自动创建对应的DynamoDB用户表
  • 默认会在用户首次登录时自动初始化用户记录,同时自动配置权限规则,每个用户仅能读写自己的用户数据,无需手动配置IAM策略
  • 前端直接调用Amplify的API客户端即可读写当前用户的信息,不需要手动传递用户标识

路径2:自定义实现(适合需要灵活控制逻辑的场景)

如果你需要自行控制整个流程,可按以下步骤实现:

  • 新建DynamoDB用户表,设置主键为userId(字符串类型),值存储对应Cognito用户的sub
  • 配置Cognito后置确认触发器(Post Confirmation Lambda Trigger),用户完成注册、邮箱验证后自动触发Lambda函数,在DynamoDB中初始化对应用户的空记录,避免前端逻辑遗漏创建记录
  • 为调用端配置IAM权限策略,仅允许用户访问主键等于自身sub的记录,示例策略片段如下:
{
  "Effect": "Allow",
  "Action": ["dynamodb:GetItem", "dynamodb:PutItem", "dynamodb:UpdateItem"],
  "Resource": "arn:aws:dynamodb:<你的AWS区域>:<你的AWS账号ID>:table/<你的用户表名>",
  "Condition": {
    "ForAllValues:StringEquals": {
      "dynamodb:LeadingKeys": ["${cognito-identity.amazonaws.com:sub}"]
    }
  }
}

注意:禁止使用用户名、邮箱、手机号等可修改字段作为关联键,也不要自行生成随机ID做关联,会额外增加一致性问题的风险。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 10:45:02