Duk*_*gal 5 amazon-cognito aws-lambda
我有一个 AWS Lambda 函数,它作为触发器附加到“发布确认”事件的用户池中。
我需要获取已创建用户的 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)})
};
Run Code Online (Sandbox Code Playgroud)
听起来身份池和用户池如何交互可能存在混淆。
context.identity.cognitoIdentityId仅当使用 Cognito 联合身份提供的凭证调用 Lambda 时,才会填充身份 id 。如果只是来自 Cognito 用户池的 lambda 调用,则情况并非如此。
Cognito 用户池和 Cognito 联合身份是两个独立的服务,将用户池视为联合身份的另一个身份提供者。这意味着当您的用户池中的用户创建身份 ID 时,不会自动创建身份 ID,您必须实际使用为该用户出售的令牌在您的身份池中创建身份。因此,如果您想在身份池中为该用户创建身份,请使用 id 令牌调用 GetId。有关详细信息,请参阅此文档页面。
| 归档时间: |
|
| 查看次数: |
2477 次 |
| 最近记录: |