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

如何将AWS Cognito用户字段映射至Strapi用户

解决方案:重写Users & Permissions插件实现Cognito字段映射

1. 定位核心回调逻辑

Users & Permissions插件处理OAuth第三方登录回调的核心方法是node_modules/@strapi/plugin-users-permissions/server/controllers/auth.js里的callback函数,我们需要重写这个方法来添加字段映射逻辑。

2. 创建自定义扩展文件

在Strapi项目根目录下创建路径:src/extensions/users-permissions/server/controllers/auth.js,Strapi会优先加载该目录下的代码,覆盖插件默认逻辑。

3. 编写字段映射代码

以下是完整的重写示例,核心是在用户创建/更新环节,将Cognito返回的自定义字段同步到Strapi扩展的用户字段:

const { sanitize } = require('@strapi/utils');
const originalAuthController = require('@strapi/plugin-users-permissions/server/controllers/auth');

module.exports = {
  ...originalAuthController,

  async callback(ctx) {
    const provider = ctx.params.provider;
    const params = ctx.request.query;

    try {
      const { user } = await strapi.plugin('users-permissions').service('providers').connect(provider, params);
      
      // 从Cognito返回的用户属性中提取自定义字段
      const cognitoAttrs = user.providerAttributes;
      const firstName = cognitoAttrs.given_name;
      const lastName = cognitoAttrs.family_name;
      const gender = cognitoAttrs.gender;

      // 更新Strapi用户的扩展字段
      await strapi.entityService.update('plugin::users-permissions.user', user.id, {
        data: {
          firstName,
          lastName,
          gender,
        },
      });

      // 保留原有的登录响应逻辑
      ctx.send({
        jwt: strapi.plugin('users-permissions').service('jwt').issue({ id: user.id }),
        user: await sanitize.contentAPI.output(user, strapi.models['plugin::users-permissions.user']),
      });
    } catch (error) {
      ctx.badRequest(error.message);
    }
  },
};

4. 关键前置检查

  • 确认AWS Cognito用户池已配置given_name、family_name、gender属性,且应用客户端已开启这些字段的读取权限。
  • 确保Strapi的Users内容类型已添加对应的firstName、lastName、gender字段,字段类型与Cognito返回值匹配(比如性别用字符串类型)。
  • 重启Strapi服务后,新用户通过Cognito注册登录时,自定义字段会自动同步到Strapi用户数据中。

内容的提问来源于stack exchange,提问作者Mr.Fabulous

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 04:15:48