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