如何从 go lambda 中获取当前的 cognito 用户

Eva*_*sso 6 go amazon-web-services aws-lambda

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

userAttributes = request.RequestContext.Authorizer["claims"]
Run Code Online (Sandbox Code Playgroud)

如果我想收到电子邮件:

userEmail = request.RequestContext.Authorizer["claims"].(map[string]interface{})["email"].(string)
Run Code Online (Sandbox Code Playgroud)

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

Max*_*icu 6

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

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

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
}
Run Code Online (Sandbox Code Playgroud)

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

func someWhere(){

    userClaims, err := claims(request)

    if err != nil {
        // handle
    }

    // you can now use : userClaims.Email, userClaims.ID
}
Run Code Online (Sandbox Code Playgroud)

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