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

AWS Amplify React应用中谷歌登录用户创建数据时Owner字段未填充

问题解决:谷歌登录后DynamoDB Owner字段未填充的修复方案

核心问题原因

社交登录用户的身份标识在Amplify自动填充Owner字段的机制中未被正确识别,而邮箱/密码登录用户的标识能被正常读取。以下是具体修复步骤:


1. 确认GraphQL模型的@auth规则配置

先检查你的GraphQL Schema,确保模型使用了默认的owner授权规则,这个规则会自动用用户的sub(唯一身份标识)填充Owner字段:

type Todo @model @auth(rules: [{ allow: owner }]) {
  id: ID!
  name: String!
  description: String
}

如果你的schema已经是这个配置,问题大概率出在用户身份信息的传递上。

2. 验证社交登录用户的身份信息

调用Auth.currentAuthenticatedUser()获取谷歌登录用户的信息,确认sub字段存在:

import { Auth } from 'aws-amplify';

Auth.currentAuthenticatedUser().then(user => {
  console.log("用户sub:", user.attributes.sub); // 检查是否输出有效字符串
});

如果sub存在但Owner仍未填充,说明Amplify的自动映射逻辑有问题;如果sub不存在,需要去Cognito用户池检查谷歌身份提供者的配置是否正确。

3. 手动传递Owner字段(快速修复方案)

如果自动填充失效,可以手动在mutation中传入Owner字段:

  • 首先修改Schema,显式添加Owner字段:
    type Todo @model @auth(rules: [{ allow: owner }]) {
      id: ID!
      name: String!
      description: String
      Owner: String # 新增字段
    }
    
  • 运行amplify codegen重新生成API代码,之后在调用mutation时手动传入用户sub:
    import { Auth, API } from 'aws-amplify';
    import { createTodo } from './graphql/mutations';
    
    const createTodoItem = async (todoData) => {
      const user = await Auth.currentAuthenticatedUser();
      return API.graphql({
        query: createTodo,
        variables: {
          input: {
            ...todoData,
            Owner: user.attributes.sub
          }
        }
      });
    };
    

4. 检查Cognito用户池配置

  • 确认谷歌作为身份提供者已在用户池中正确配置,且应用客户端已启用该提供者;
  • 检查用户池的属性映射,确保谷歌的用户标识(如sub)被正确映射到Cognito用户的sub属性;
  • 更新Amplify CLI到最新版本(npm install -g @aws-amplify/cli),旧版本可能存在社交登录的兼容bug。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 15:00:19