amazon-web-services - 如何从 go lambda 中获取当前的认知用户

标签 amazon-web-services go aws-lambda

我很难从用 Go 编写的 lambda 函数中获取当前的 Cognito 用户属性。我目前正在做:

userAttributes = request.RequestContext.Authorizer["claims"]

如果我想收到电子邮件:

userEmail = request.RequestContext.Authorizer["claims"].(map[string]interface{})["email"].(string)

我认为这不是一个好方法,甚至不是一个可以接受的方法 - 它必须有更好的方法来做到这一点。

最佳答案

您可以使用第 3 方库将 map[string]interface{} 转换为具体类型。检查mitchellh/mapstructure库,它将帮助您以更好的方式实现。

因此,您可以使用以下代码改进您的代码:

import "github.com/mitchellh/mapstructure"

type Claims struct {
    Email string
    // other fields
    ID int
}

func claims(r request.Request) (Claims, error) {
    input := r.RequestContext.Authorizer["claims"]
    output := Claims{}
    err := mapstructure.Decode(input, &output)

    if err != nil {
        return nil, err
    }

    return output, nil
}

在你的处理程序中的某个地方,你可以通过调用这个方法来获得你的声明

func someWhere(){

    userClaims, err := claims(request)

    if err != nil {
        // handle
    }

    // you can now use : userClaims.Email, userClaims.ID
}

不要忘记根据您的(r 参数)更改func claims 请求参数类型。

关于amazon-web-services - 如何从 go lambda 中获取当前的认知用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53015372/

相关文章:

amazon-web-services - 计划创建一个需要 3 个角色的 CFT,其中包含托管策略和附加的内联策略

go - OSX 10.7.5 (Lion) 支持什么版本的 Go

go - Go中有类似PHP的isset()的函数吗?

java - 如何在 Java 中为 SNSEvent 和 S3Event 使用多个 LambdaFunctionHandler?

python - 如何使用 Python 检索 AWS Lambda 公共(public) IP 地址?

Django celery SQS "No result backend is configured."

amazon-web-services - 由于权限问题,无法从 API Gateway 调用简单 Lambda

python - Amazon Lambda 是否适合每天并行计算数百份报告?

java - AWS CodeStar - AWS Elastic Beanstalk 与 Amazon EC2

api - 未在Vue页面上检测到Cookie