Search code examples
go-swagger

OperationhandlerFunc second parameter becomes interface{} instead of *models.Model


I'm trying to add authentication to my api following the go-swagger tutorial: https://goswagger.io/tutorial/composed-auth/

But my generated code becomes:

type GetAuthenticatedUserHandlerFunc func(GetAuthenticatedUserParams, interface{}) middleware.Responder

While in the example it is:

type AddOrderHandlerFunc func(AddOrderParams, *models.Principal) middleware.Responder

I can't seem to find how to make the second parameter a reference to model. I have a model called user defined. If i try to do:

func GetAuthenticatedUserHandlerFunc(params auth.GetAuthenticatedUserParams, user *models.User) middleware.Responder

I get this error:

cannot convert handlers.GetAuthenticatedUserHandlerFunc (type func(auth.GetAuthenticatedUserParams, *models.User) "github.com/wunari/easypoll-backend/vendor/github.com/go-openapi/runtime/middleware".Responder) to type auth.GetAuthenticatedUserHandlerFunc

How can i make the generated code use the user model?

My swagger.yml: https://github.com/wunari/easypoll-backend/blob/master/docs/swagger.yml

Thanks


Solution

  • I was missing the -P (--principal) flag when generating with go-swagger cli.

    Example:

    swagger generate server -t docs -f ./docs/swagger.yml --exclude-main -A easypoll --principal models.User