小编KSa*_*mra的帖子

通过确认后 lambda 函数将 Cognito 用户信息写入 DynamoDB?

我在实现确认后 lambda 函数时遇到问题,在该函数中我从注册过程中获取用户提交的凭据并将其写入“用户”DynamoDB 表。我试图写入表格的具体条目是 - 用户名 - 电子邮件 - 实际姓名

为了区分用户,我需要将主键作为“sub”值,因为用户可以更改他们的用户名,这可能会在将来导致问题。

我遇到的主要困惑点如下

1) 我应该以什么角色开始我的 Lambda 函数?

创建 lambda 函数时,我需要给它一个起始角色,但我不确定我应该使用什么起始模板。我知道我将需要 DynamoDB 写访问权限,但我没有看到相应的模板。

2) 如何访问 Cognito 用户的各个字段?

据我所知,这些值应该存储在处理程序函数的“事件”参数中,但我找不到任何文档或示例事件来说明如何访问诸如“sub”、“电子邮件”等。

amazon-web-services amazon-dynamodb amazon-cognito aws-lambda

3
推荐指数
1
解决办法
1420
查看次数

在确认后 lambda 函数中访问 Cognito 自定义属性

我有一个确认后 lambda 函数,它将用户属性信息写入 dynamoDB 表。我已经设法通过执行以下操作来访问“事件”参数中的标准用户属性字段

event.request.userAttributes.sub
Run Code Online (Sandbox Code Playgroud)

但试图跑

event.request.userAttributes.role //where role is the name of my custom attribute
Run Code Online (Sandbox Code Playgroud)

似乎不起作用。有人知道正确的语法是什么吗?我是否需要为自定义属性设置任何特殊的读取权限?我在最初创建这个用户池很长时间后创建了这个自定义属性,如果这改变了事情的话。

amazon-cognito aws-lambda

2
推荐指数
1
解决办法
2877
查看次数

如何在数据库中的所有当前文档中添加新字段?

因此,我正在尝试为我的应用程序实现新的云功能,但需要对现有数据库数据模型进行一些调整。我数据库中的每个用户都有一个我要每周更新的字段。我不希望此功能每周都为所有用户运行,因为这将是不必要的昂贵操作。相反,我只是决定通过在用户文档中存储“最后更新”字段来跟踪我上次更新该用户的时间。

问题是我现有的400多个用户中没有一个拥有此字段。因此,我正在寻找一种为数据库中所有现有用户添加此字段的方法,该字段已初始化为某个默认时间。

我曾考虑过按如下所述使用“批量写入”:https : //firebase.google.com/docs/firestore/manage-data/transactions#batched-writes

但似乎您需要指定要更新的每个文档的ID。我所有的用户都有一个由Firestore生成的UUID,因此手动写入每个用户对我来说并不实际。有什么办法可以在现有集合的每个文档中创建一个新字段?或者,也许不是一种获取所有文档ID的列表的方法,以便我可以遍历它并进行非常丑陋的批写?我只需要执行一次此大规模更新,然后再也不需要执行一次。除非我发现一条新数据,否则我想跟踪。

firebase google-cloud-functions google-cloud-firestore

1
推荐指数
1
解决办法
538
查看次数

使用Lambda函数和S3触发器未能写入DynamoDB

我正在尝试编写一个lambda函数,该函数会在将新映像写入S3存储桶时触发。触发器已经使用正确的S3存储桶进行了设置,因此我知道这不是问题。

lambda函数本身具有s3:GetObject和dynamodb。*角色(对于DynamoDB写操作应具有完全访问权限)。

这里的目标是简单地写一个我已经创建的名为'art'的表,并插入一个我试图从中获取的主键值(imageTitle)var imageName。然后,我想为该键分配一个属性,即存储在中的该图像的url var url

这只是我要尝试的简单练习,因此我可以继续进行更复杂的数据库写入。但是到目前为止,art即使我向S3存储桶中添加了触发触发器的新对象,也没有将任何内容写入表中。lambda函数是否可能未部署?我直接在Lambda Console的内联编辑器中编写了它并保存了它。

这是代码:

const AWS = require('aws-sdk');
const docClient = new AWS.DynamoDB.DocumentClient({region: 'us-east-1'});
const s3 = new AWS.S3();

exports.handler = async (event, context, callback) => {
    //var sourceBucket = event.Records[0].s3.bucket.name;
    var sourceKey = event.Records[0].s3.object.key;
    var imageName = sourceKey.stringify;

    //generate imageURL
    var url = "https://s3.amazonaws.com/myapp-20181030214040-deployment/public/" + imageName;

    var params = {
        TableName : 'art',
        Item: {
            imageTitle: imageName,
            imageURL: url
        }
    };
    docClient.put(params, function(err, data) {
       if (err) console.log(err);
       else …
Run Code Online (Sandbox Code Playgroud)

amazon-web-services amazon-dynamodb aws-sdk aws-lambda

0
推荐指数
1
解决办法
380
查看次数