在 AWS lambda 上列出 cognito userpool 用户
Posted
技术标签:
【中文标题】在 AWS lambda 上列出 cognito userpool 用户【英文标题】:Listing cognito userpool users on AWS lambda 【发布时间】: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
关键字
【参考方案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"]
【讨论】:
以上是关于在 AWS lambda 上列出 cognito userpool 用户的主要内容,如果未能解决你的问题,请参考以下文章
AWS API Gateway + Cognito 用户池授权方 + Lambda - 我需要设置哪些 HTTP 标头和权限?
AWS Lambda、API 网关和 Cognito:如何在 lambda 函数中获取身份对象?
如何在 API 网关上的 cognito 授权方保护的 lambda 函数中获取 AWS Cognito 用户数据
在 AWS Cognito 和 Lambda 中获取 Facebook 访问令牌