获取 Lambda 上经过身份验证(确认)的用户的用户名?

Sun*_*e17 5 amazon-web-services amazon-cognito aws-lambda aws-api-gateway

在移动应用程序中注册的帐户经过验证后,我希望 Lambda 函数接收用户 ID。由于这个原因,我在 API Gateway 中创建了 POST API。选中“使用调用者凭据调用”,并将身体映射模板添加为

{ "identity": "$input.params('identity')" }
Run Code Online (Sandbox Code Playgroud)

不幸的是,当我在 API Gateway 中测试它时,它给出了 HTTP 错误 404-Not Found 错误。

print context.identity
Run Code Online (Sandbox Code Playgroud)

结果为

<_main__.CognitoIdentity object at 0x7eg6f79v2bed2>
Run Code Online (Sandbox Code Playgroud)

&

print context.identity.cognito_identity_id
Run Code Online (Sandbox Code Playgroud)

结果为

None
Run Code Online (Sandbox Code Playgroud)

甚至,当我从移动应用程序尝试时,只有在输入验证码后,屏幕上才会显示 HTTP 错误 404-未找到警报。我已将 AWSLambdaFullAccess 策略和 AmazonAPIGatewayInvokeFullAccess 策略等所有权限授予 Cognito(Auth 和 UnAuth)IAM 角色。如果您让我知道问题的解决方案,我将很高兴。

Lamda 错误API Gateway PUSH API 设置API Gateway PUSH API 方法

Kan*_*yan 0

如果您有经过身份验证的用户,则意味着您拥有传递给 lambda 的该身份验证的访问令牌,

您可以通过它Access Token获取用户信息及其属性。

http://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/CognitoIdentityServiceProvider.html#getUser-property

var params = {
  AccessToken: 'STRING_VALUE' /* required */
};
cognitoidentityserviceprovider.getUser(params, function(err, data) {
  if (err) console.log(err, err.stack); // an error occurred
  else     console.log(data);           // successful response
});
Run Code Online (Sandbox Code Playgroud)

这段代码在 Node 或 JavaScript 中都很好。

如果您使用其他 SDK,它将具有类似的签名。

希望能帮助到你。