2017-02-20 201 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