【问题标题】:Listing cognito userpool users on AWS lambda在 AWS lambda 上列出 cognito userpool 用户
【发布时间】:2020-03-19 09:53:28
【问题描述】:

我试图在我的 lambda 函数中列出我所有的 cognito 用户,但是我在返回中什么也没得到,就好像回调没有被执行一样。我做错了什么?

下面代码的输出只是在控制台中打了个招呼。

var AWS = require("aws-sdk");

const cognitoidentityserviceprovider = new AWS.CognitoIdentityServiceProvider();
export async function main() {
console.log("hello")
  var params = {
    UserPoolId: "myuserpoolid",
    AttributesToGet: ["username"]
  };

  cognitoidentityserviceprovider.listUsers(params, (err, data) => {
    if (err) {
      console.log(err, err.stack);
      return err;
    } else {
      console.log(data);
      return data;
    }
  });
}

【问题讨论】:

  • 尝试删除函数中的 async 关键字

标签: node.js amazon-web-services aws-lambda amazon-cognito serverless-framework


【解决方案1】:

首先,代码的结构是错误的。 Lambda 函数的头部应该有一定的结构,要么使用异步函数,要么使用非异步函数。由于您在示例中使用了非异步代码,因此我将向您展示如何执行后面的操作。

var AWS = require("aws-sdk");

const cognitoidentityserviceprovider = new AWS.CognitoIdentityServiceProvider();

exports.handler =  function(event, context, callback) {
  console.log("hello")
  var params = {
    UserPoolId: "myuserpoolid",
    AttributesToGet: ["username"]
  };

  cognitoidentityserviceprovider.listUsers(params, (err, data) => {
    if (err) {
      console.log(err, err.stack);
      callback(err)        // here is the error return
    } else {
      console.log(data);
      callback(null, data) // here is the success return
    }
  });
}

在这种情况下,Lambda 将仅在调用 callback 时(或超时)完成。

同样,您可以使用异步功能,但您需要相应地重组您的代码。这是取自official docs 的示例。请注意如何使用 promise 包装器。

const https = require('https')
let url = "https://docs.aws.amazon.com/lambda/latest/dg/welcome.html"

exports.handler = async function(event) {
  const promise = new Promise(function(resolve, reject) {
    https.get(url, (res) => {
        resolve(res.statusCode)
      }).on('error', (e) => {
        reject(Error(e))
      })
    })
  return promise
}

【讨论】:

    【解决方案2】:

    对于 AttributesToGet,不要使用用户名,因为它是始终返回的字段之一。以下是 Attributes 数组的成员,可以在 AttributesToGet 字段中使用:

    sub、email_verified、phone_number_verified、phone_number、email。

    例如

    AttributesToGet: ["email","email_verified"]
    

    【讨论】:

      猜你喜欢
      • 2018-07-17
      • 1970-01-01
      • 1970-01-01
      • 2020-07-03
      • 2020-10-16
      • 2021-05-10
      • 2019-09-09
      • 2020-11-20
      • 2016-09-22
      相关资源
      最近更新 更多