Skip to content

Auth Middleware

Put auth in middleware policies when the same check applies to more than one handler.

type WritePolicy struct {
_ sdk.Use[RequireActor]
_ sdk.Use[RequireWritePermission]
}
func (RequireActor) HandleHTTP(ctx sdk.Ctx) (any, error) {
token := ctx.Request().Header("Authorization")
if token == "" {
return nil, ctx.Errors().Failure(http.StatusUnauthorized, "missing authorization")
}
actor, err := parseActor(token)
if err != nil {
return nil, ctx.Errors().Failure(http.StatusUnauthorized, "invalid authorization")
}
ctx.Locals().Set("actor", actor)
return ctx.Next()
}

Request models can bind middleware locals:

type CreateProjectRequest struct {
Actor Actor `local:"actor" validate:"required"`
Name string `json:"name" validate:"required"`
}

This keeps auth reusable without hiding it in generated code.

Read Middleware for group inheritance, route policies, and protocol-specific middleware contracts.