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

如何修改AWS Cognito post-confirmation Lambda触发器创建DynamoDB Profile对象

实现Cognito新用户自动创建DynamoDB Profile记录

第一步:给Lambda函数添加DynamoDB写入权限

你的Lambda执行角色需要具备向Profile表写入数据的权限。打开IAM控制台,找到该Lambda对应的角色,添加以下内联政策:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "dynamodb:PutItem",
            "Resource": "arn:aws:dynamodb:你的区域:你的账号ID:table/Profile"
        }
    ]
}

第二步:编写Lambda函数代码

以下是两种常见SDK版本的实现,按需选择:

AWS SDK v2 代码(适合Lambda在线编辑,无需额外依赖)

const AWS = require('aws-sdk');
const dynamodb = new AWS.DynamoDB.DocumentClient({ region: "你的AWS区域" });
const TABLE_NAME = "Profile";

exports.handler = async (event) => {
    // 从Cognito触发器事件中提取用户核心信息
    const user = event.request.userAttributes;
    const profileItem = {
        userId: user.sub, // 用Cognito用户唯一标识sub作为Profile主键
        username: user.username,
        email: user.email,
        createdAt: new Date().toISOString(),
        status: "active" // 自定义默认状态字段
    };

    try {
        await dynamodb.put({
            TableName: TABLE_NAME,
            Item: profileItem
        }).promise();
        console.log(`成功为用户${user.sub}创建Profile记录`);
    } catch (err) {
        console.error("创建Profile失败:", err);
        // 这里的错误不会中断Cognito用户创建流程,仅作日志记录
    }

    // 必须返回事件对象,否则Cognito会触发错误
    return event;
};

AWS SDK v3 代码(推荐用于新项目)

如果使用Node.js 16+运行环境,可使用更轻量化的SDK v3:

import { DynamoDBClient, PutItemCommand } from "@aws-sdk/client-dynamodb";
import { marshall } from "@aws-sdk/util-dynamodb";

const client = new DynamoDBClient({ region: "你的AWS区域" });
const TABLE_NAME = "Profile";

export const handler = async (event) => {
    const user = event.request.userAttributes;
    const profileItem = {
        userId: user.sub,
        username: user.username,
        email: user.email,
        createdAt: new Date().toISOString(),
        status: "active"
    };

    try {
        const command = new PutItemCommand({
            TableName: TABLE_NAME,
            Item: marshall(profileItem)
        });
        await client.send(command);
        console.log(`Profile created for user ${user.sub}`);
    } catch (error) {
        console.error("Error creating profile:", error);
    }

    return event;
};

第三步:测试验证

  • 可以在Lambda控制台选择Cognito post-confirmation的测试事件模板,模拟用户创建触发流程
  • 直接在Cognito用户池创建新用户,查看Profile表是否生成对应记录

注意事项:

  • 确保Profile表的主键字段与代码中userId一致,否则会写入失败
  • 若需过滤未验证邮箱的用户,可添加判断逻辑:if (user.email_verified === 'true')再执行写入
  • Lambda超时时间建议设置为3-5秒,避免DynamoDB写入超时

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 14:37:22