2015-05-12 38 views
0

我试图在Go中使用Auth0和Martini。我正在使用他们的examples,但我似乎无法让它工作,不管我尝试什么。在Go Martini中的Auth0

这里是我的代码:

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.HandlerjwtMiddleware.HandlerWithNext,我得到Value not found for type http.HandlerFunc恐慌。

有没有人有任何想法我做错了什么?

回答

2

要使用Martini的jwt中间件,您只需使用CheckJWT方法而不是Handler方法。

检查这个例子:https://github.com/auth0/go-jwt-middleware/blob/master/examples/martini-example/main.go#L27

让我知道,如果这有助于。

干杯!

+0

工程就像一个魅力。另外,我做了一个双倍考虑,想知道我是否错过了马丁尼的例子,但后来发现你刚刚添加了它。谢谢!! –

+1

哈哈哈是的:)。为你添加它;)。 – mgonto

+0

由于不会调用“SecuredPingHandler”,因此这似乎不再有效。我甚至使用'os.Exit'来代替'SecuredPingHandler',只是为了看看代码是否得到了这么多,它从来没有..我只是得到'[martini] Completed 200 OK'并且应用程序保持运行 –