【问题标题】:AWS Cognito add user to a group from LambdaAWS Cognito 从 Lambda 将用户添加到组
【发布时间】:2020-02-25 02:02:30
【问题描述】:

诚然,这是我第一次尝试使用 Cognito 做任何事情,但我无法通过 lambda 将用户添加到用户组。这是 lambda 代码:

var AWS = require('aws-sdk');
var cognitoidentityserviceprovider = new AWS.CognitoIdentityServiceProvider({apiVersion: '2016-04-18'});

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

    var params = {
        GroupName: 'ROLE_ADMIN',
        // UserPoolId: 'arn:aws:cognito-idp:us-east-1:23453453453:userpool/us-east-1_XXX',
        UserPoolId: 'us-east-1_XXX',
        // Username: 'user@email.com'
        Username: 'ec12f604-a83c-4c76-856b-3acd9ca70562'
      }

console.log('before')
  cognitoidentityserviceprovider.adminAddUserToGroup(params, function(err, data) {
    console.log(params)
    if (err) console.log("Error");
    else     console.log("Success");
  });

  console.log('after')

  console.log("Executed.");

  context.succeed(event);
};

我已将 AWS 资源添加到 lambda

Amazon CloudWatch 日志 Amazon Cognito 身份 Amazon Cognito 同步 Amazon Cognito 用户池 亚马逊社交网络 身份和访问管理

这是输出:

函数日志:START RequestId:e6fb3c51-3928-40e1-b0c4-f7a2d9054ef0 版本:$LATEST 2019-10-29T19:04:58.516Z e6fb3c51-3928-40e1-b0c4-f7a2d9054ef0 之前的信息 2019-10-29T19:04:59.017Z e6fb3c51-3928-40e1-b0c4-f7a2d9054ef0 之后的信息 2019-10-29T19:04:59.018Z e6fb3c51-3928-40e1-b0c4-f7a2d9054ef0 信息已执行。 结束请求 ID:e6fb3c51-3928-40e1-b0c4-f7a2d9054ef0 报告请求 ID: e6fb3c51-3928-40e1-b0c4-f7a2d9054ef0 持续时间:657.73 毫秒 持续时间:700 毫秒内存大小:128 MB 使用的最大内存:37 MB 初始化 持续时间:464.08 毫秒

我没有看到cognitoidentityserviceprovider.adminAddUserToGroup 被调用,并且测试运行,但看起来没有任何用途被添加到ROLE_ADMIN 组。我应该怎么做才能将用户添加到组中?

任何意见将不胜感激...谢谢。

【问题讨论】:

    标签: amazon-web-services aws-lambda amazon-cognito


    【解决方案1】:

    如您所见,您看不到SuccessError 日志。

    操作adminAddUserToGroup 在完成之前已被取消,因为您立即将context.succeed(event) 调用到kill 函数。

    如何解决,等动作完成,然后kill函数。一般来说,我们有两种选择:

    1. 正确使用callback 函数(推荐):
    var AWS = require('aws-sdk');
    var cognitoidentityserviceprovider = new AWS.CognitoIdentityServiceProvider({ apiVersion: '2016-04-18' });
    
    exports.handler = (event, context, callback) => {
    
      var params = {
        GroupName: 'ROLE_ADMIN',
        // UserPoolId: 'arn:aws:cognito-idp:us-east-1:23453453453:userpool/us-east-1_XXX',
        UserPoolId: 'us-east-1_XXX',
        // Username: 'user@email.com'
        Username: 'ec12f604-a83c-4c76-856b-3acd9ca70562'
      }
    
      console.log('before')
      cognitoidentityserviceprovider.adminAddUserToGroup(params, function (err, data) {
        console.log(params)
        if (err) console.log("Error");
        else console.log("Success");
    
        // when the action finished
        console.log('after');
    
        console.log("Executed.");
    
        context.succeed(event);
      });
    };
    

    1. 告诉 Lambda 函数 wait until the call stack is clear:将 context.callbackWaitsForEmptyEventLoop = true 插入函数的第一行(在声明 params 变量之前)

    【讨论】:

    • 不要学究气,但你能明确说明哪个是选项一,哪个是选项2?我假设文本框中的代码都是第一个选项,并告诉函数等到调用堆栈清除是选项 2?
    • @StillLearningToCode 哦,你是对的,我更新了我的答案!谢谢!
    猜你喜欢
    • 2018-12-11
    • 2018-08-23
    • 2019-11-29
    • 2018-09-08
    • 2020-05-02
    • 1970-01-01
    • 2020-09-01
    • 2021-01-22
    • 1970-01-01
    相关资源
    最近更新 更多