スキップしてコンテンツを表示

Question about writing a Cognito post-auth lambda in go

1

I wrote a really simple post-auth lambda for cognito like this:

func HandleRequest(ctx context.Context, e events.CognitoEventUserPoolsPostAuthentication ) error {
	eventJson, _ := json.MarshalIndent(e, "", "  ")
	eventString := strings.ReplaceAll(string(eventJson), "\n", "\r")

	log.Printf("EVENT: %s", eventString)
	return nil
}

func main() {
	lambda.Start(HandleRequest)
}

It's only there - for now - to log activity. But when I actually attach it to the user pool as a post-authentication trigger it makes OAuth2 not work. The error message is "contact administrator."

I'm thinking that I need to actually do something besides return error = nil. I'm not having much luck finding any examples of this in go, though.

The javascript example ends with:

    // Return to Amazon Cognito
    callback(null, event);

Is that what the expectation is in 'go' as well - that I return (events.CognitoEventUserPoolsPostAuthentication, error) and just send it back the original event?

質問済み 4年前795ビュー

2回答
0
承認された回答

I figured this out. I want more control over things so I'm using this:

func HandleRequest(ctx context.Context, request events.APIGatewayV2HTTPRequest) (events.APIGatewayV2HTTPResponse, error) { ... }

which works great. It was kind of nice before that it would take care of marshaling/unmarshaling and now I have to do it myself, but that's not bad. I do kind of wish the Response "Body" was just interface{} and that it would automatically marshal/unmarshal based on Content-Type but it's fine.

One thing I do miss from doing this in Kotlin and Spring is the ability to just throw an Exception, and write an ExceptionMapper that would set the appropriate http status code.

回答済み 4年前

0

I tried following

package main

import (
	"fmt"

	"github.com/aws/aws-lambda-go/events"
	"github.com/aws/aws-lambda-go/lambda"
)

func handler(event events.CognitoEventUserPoolsPostAuthentication) (events.CognitoEventUserPoolsPostAuthentication, error) {
	fmt.Printf("PreAuthentication of user: %s\n", event.UserName)

	// Return to Amazon Cognito
	return event, nil
	// Try raising an error
	// return event, fmt.Errorf("TESTING LAMBDA ERRORS WITH GOLANG")
}

func main() {
	lambda.Start(handler)
}

回答済み 4年前

ログインしていません。 ログイン 回答を投稿する。

優れた回答とは、質問に明確に答え、建設的なフィードバックを提供し、質問者の専門分野におけるスキルの向上を促すものです。