Как получить текущего пользователя Cognito изнутри Go лямбда - PullRequest
0 голосов
/ 26 октября 2018

Мне трудно получить текущие пользовательские атрибуты Cognito из моей лямбда-функции, написанной на Go.В настоящее время я делаю:

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

И если я хочу получить письмо:

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

Я не думаю, что это хороший или даже приемлемый способ - этодолжен быть лучший способ сделать это.

1 Ответ

0 голосов
/ 27 октября 2018

Вы можете использовать стороннюю библиотеку для преобразования 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 параметр).

...