Auth0 в Го Мартини

Я пытаюсь использовать Auth0 с Мартини в Go. Я использую их примеры, но я не могу заставить их работать, что бы я ни пытался.

Вот мой код:

package main

import (
  "flag"
  "github.com/go-martini/martini"
  "github.com/martini-contrib/render"
  "github.com/auth0/go-jwt-middleware"
  "encoding/base64"
  "github.com/dgrijalva/jwt-go"
  "net/http"
)

func main() {
  m := martini.Classic()
  port := flag.String("port", "8000", "HTTP Port")
  flag.Parse()

  jwtMiddleware := jwtmiddleware.New(jwtmiddleware.Options{
    ValidationKeyGetter: func(token *jwt.Token) (interface{}, error) {
      decoded, err := base64.URLEncoding.DecodeString("<token>")
      if err != nil {
        return nil, err
      }
      return decoded, nil
    },
  })

  m.Use(render.Renderer(render.Options{
    IndentJSON: true, // Output human readable JSON
  }))

  m.Get("/", jwtMiddleware.Handler, func(res http.ResponseWriter, req *http.Request) { // res and req are injected by Martini
    res.WriteHeader(200) // HTTP 200
  })

  // Get the PORT from the environment.
  m.RunOnAddr(":" + *port)

}

Когда я запускаю это, я получаю панику, которая говорит Value not found for type http.Handler

Если я изменю jwtMiddleware.Handler в jwtMiddleware.HandlerWithNextЯ получаю панику за Value not found for type http.HandlerFunc,

У кого-нибудь есть идеи, что я делаю не так?

1 ответ

Решение

Чтобы использовать промежуточное ПО jwt с Martini, вам просто нужно использовать CheckJWT метод вместо метода обработчика.

Проверьте этот пример: https://github.com/auth0/go-jwt-middleware/blob/master/examples/martini-example/main.go#L27

Позвольте мне знать, если это помогает.

Ура!

Другие вопросы по тегам