2015-05-12 6 views
0

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

Вот мой код:

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.

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

ответ

2

Чтобы использовать jwt-middleware с Martini, вам просто нужно использовать метод CheckJWT вместо метода Handler.

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

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

Cheers!

+0

Работает как очарование. Кроме того, я сделал двойной прием, задаваясь вопросом, не пропустил ли я пример мартини, но потом заметил, что вы только что добавили его. Благодаря!! –

+1

hahaha yep :). Добавил его для вас;). – mgonto

+0

Это больше не работает, поскольку вызов «SecuredPingHandler» никогда не был выполнен. Я даже использовал 'os.Exit' вместо' SecuredPingHandler' только для того, чтобы узнать, доходит ли код до этого, и он никогда не делает. Я просто получаю '[martini] Completed 200 OK', и приложение продолжает работать –