猿问

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

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

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

如果我想收到电子邮件:

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

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


蛊毒传说
浏览 107回答 1
1回答

慕运维8079593

您可以使用 3rd 方库转换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}func claims不要忘记根据您的(参数)更改请求参数类型r。
随时随地看视频慕课网APP

相关分类

Go
我要回答