Aws lambda 如何获取用户的cognito标识ID

Aws lambda 如何获取用户的cognito标识ID,aws-lambda,amazon-cognito,Aws Lambda,Amazon Cognito,我有一个AWS Lambda函数,在“确认后”事件中作为触发器附加到用户池 我需要获取已创建用户的标识ID,如何才能做到这一点 这是我的密码: 'use strict'; var AWS = require('aws-sdk'); var region = 'eu-west-1' var sqs = new AWS.SQS({region : region}); var s3 = new AWS.S3({region : region}); var util = require('util');

我有一个AWS Lambda函数,在“确认后”事件中作为触发器附加到用户池

我需要获取已创建用户的标识ID,如何才能做到这一点

这是我的密码:

'use strict';
var AWS = require('aws-sdk');
var region = 'eu-west-1'
var sqs = new AWS.SQS({region : region});
var s3 = new AWS.S3({region : region});
var util = require('util');
let awsAccountId = 'xx';
let queueName = 'xx';

// this function saves public user data to a bucket where clients can access it.

let putObjectToS3 = (bucket, key, data, contentType, callback) => {
        let params = {
            Bucket : bucket,
            Key : key,
            Body : data,
            CacheControl: "max-age=864000",
            ContentType: contentType
        }
        s3.putObject(params, callback);
}

let sendSQSMessage = (dataStr, callback) => {
  let queueURL = 'https://sqs.' + region + '.amazonaws.com/' + awsAccountId + '/' + queueName;
  let params = {
    MessageBody: dataStr,
    QueueUrl: queueURL
  };
  sqs.sendMessage(params, callback);
}

exports.handler = (event, context, callback) => {
    console.log('event', event)

    let S3key = 'publicuserdata/' + event.request.userAttributes.sub + '.json';
    let publicUserData = {};
    publicUserData['IdentityId'] = context.identity.cognitoIdentityId; //doesn't seem to work
    publicUserData['region'] = event.region;
    publicUserData['userName'] = event.userName;
    publicUserData['userPoolId'] = event.userPoolId;

    let finishLambdaCallback = (err, result) => {
        if (err) {
            console.log('error', err)
        } else {
            console.log('success', result)
            context.done(null, event)
        }
    };

    let funcOne = (callback) => {
        let data = util.inspect(context)
        //let data = JSON.stringify(context, null, 2)

        putObjectToS3(  'files.example.org', 
                        S3key, 
                        data, 
                        'application/json',
                        callback);
    }

    let funcTwo = (callback) => {
        let data = util.inspect(context)
        //let data = JSON.stringify(context, null, 2)
        sendSQSMessage(data, callback);
    }

    funcOne(() => {funcTwo(finishLambdaCallback)})

};

这听起来可能会混淆身份池和用户池的交互方式

只有当使用Cognito联合身份提供的凭据调用Lambda时,
context.identity.cognitoIdentityId
才会填充标识id。当它只是来自Cognito用户池的lambda调用时,情况就不是这样了


Cognito用户池和Cognito联合身份是两个独立的服务,将用户池视为联合身份的另一个身份提供者。这意味着,当您的用户池中的某个用户正在使用时,不会自动创建标识id,您必须实际使用为该用户出售的令牌在您的标识池中创建标识。所以,如果您想在身份池中为该用户创建一个身份,请使用id令牌调用GetId。有关详细信息,请参阅。

用户池和标识池中的项目是如何链接的?如何根据cognito用户查找
cognitoIdentityId
?如何基于
cognitoIdentityId
查找cognito用户?此外,我使用
cognitoIdentityId
作为用户ID来识别整个应用程序中的用户,我是否应该使用
sub
?谢谢