2017-02-20 200 views
0

我有连接作为触发到用户池“发布确认”事件的AWS lambda函数的cognito IdentityId。我怎样才能得到用户

我需要已创建了用户的IdentityId,我该怎么办呢?

这里是我的代码:

'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)}) 

}; 

回答

0

这听起来像有可能是对如何识别池和用户交互池混乱。

的context.identity.cognitoIdentityId填充只有当拉姆达被调用,通过Cognito联合身份贩卖证书的身份标识。当它只是来自Cognito用户池的lambda调用时,情况就不会如此。

Cognito用户池和Cognito联合身份是两个不同的服务,以为用户池的另一个身份提供商联合身份的。这意味着当用户池中的用户不会自动创建身份标识时,您必须实际使用为该用户出售的标记才能在标识池中创建标识。因此,如果您想为该用户在身份池中创建身份,请使用ID令牌调用GetId。有关详细信息,请参阅this docs page