我很难从用 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/