Fasthttp + fasthttprouter, пытается написать промежуточное ПО

В настоящее время я пытаюсь написать промежуточное программное обеспечение для работы с fasthttp и fasthttprouter. И я застрял.

func jwt(h fasthttprouter.Handle) fasthttprouter.Handle {
myfunc := func(ctx *fasthttp.RequestCtx, _ fasthttprouter.Params) {
    fmt.Println(string(ctx.Request.Header.Cookie("Authorization")))
}

return myfunc
}

Как мне запустить настоящий обработчик сейчас? Я чувствую, что упускаю что-то очень простое.

Я прочитал этот пост в блоге: Middleware на Голанге. Но я потерян.

Есть идеи?

С уважением

2 ответа

Решение

Например, давайте создадим функцию промежуточного программного обеспечения, которая будет обрабатывать CORS, используя:

https://github.com/buaazp/fasthttprouter и https://github.com/valyala/fasthttp

var (   
    corsAllowHeaders     = "authorization"   
    corsAllowMethods     ="HEAD,GET,POST,PUT,DELETE,OPTIONS"   
    corsAllowOrigin      = "*"   
    corsAllowCredentials = "true"    
) 

func CORS(next fasthttprouter.Handle) fasthttprouter.Handle {
    return fasthttprouter.Handle(func(ctx *fasthttp.RequestCtx, p fasthttprouter.Params) {

    ctx.Response.Header.Set("Access-Control-Allow-Credentials", corsAllowCredentials)
    ctx.Response.Header.Set("Access-Control-Allow-Headers", corsAllowHeaders)
    ctx.Response.Header.Set("Access-Control-Allow-Methods", corsAllowMethods)
    ctx.Response.Header.Set("Access-Control-Allow-Origin", corsAllowOrigin)

    next(ctx, p)
})
}

Теперь мы связываем эту функцию промежуточного программного обеспечения с нашим обработчиком индекса и регистрируем его на маршрутизаторе.

func Index(ctx *fasthttp.RequestCtx, _ fasthttprouter.Params) {
    fmt.Fprint(ctx, "some-api")
}

func main() {
    var handler fasthttprouter.Handle
    handler = Index
    handler = CORS(handler)

    router.Handle("GET", "/", handler)
}

Пример аутентификации промежуточного программного обеспечения для fasthttp & fasthttprouter (новые версии)

type Middleware func(h fasthttp.RequestHandler) fasthttp.RequestHandler
type AuthFunc func(ctx *fasthttp.RequestCtx) bool
func NewAuthMiddleware(authFunc AuthFunc) Middleware {
    return func(h fasthttp.RequestHandler) fasthttp.RequestHandler {
        return func(ctx *fasthttp.RequestCtx) {
            result, err: = authFunc(ctx)
            if result {
                h(ctx)
            } else {
                ctx.Response.SetStatusCode(fasthttp.StatusUnauthorized)
            }
        }
    }
}

func AuthCheck(ctx *fasthttp.RequestCtx)(bool, error) {
    return false; // for example ;)
}

// router
authMiddleware: = middleware.NewAuthMiddleware(security.AuthCheck)
    ...
router.GET("/protected", authMiddleware(handlers.ProtectedHandler))
Другие вопросы по тегам