2016-03-24 6 views
0

Ich versuche die JWT-Middleware-Beispiele, um JWT mit Martini zu arbeiten, und es gibt mir eine Rückkehr, wenn es den Authentifizierungshandler trifft.GoLang JWT mit Martini werfen <ungültiger Wert>?

Hier ist der Code, direkt aus den Beispielen ..

package main 

import (
    "encoding/json" 
    "github.com/auth0/go-jwt-middleware" 
    "github.com/dgrijalva/jwt-go" 
    "github.com/go-martini/martini" 
    "net/http" 
) 

func main() { 

    StartServer() 

} 

func StartServer() { 
    m := martini.Classic() 

    jwtMiddleware := jwtmiddleware.New(jwtmiddleware.Options{ 
     ValidationKeyGetter: func(token *jwt.Token) (interface{}, error) { 
      return []byte("My Secret"), nil 
     }, 
     SigningMethod: jwt.SigningMethodHS256, 
    }) 

    m.Get("/ping", PingHandler) 
    m.Get("/secured/ping", jwtMiddleware.CheckJWT, SecuredPingHandler) 

    m.Run() 
} 

type Response struct { 
    Text string `json:"text"` 
} 

func respondJson(text string, w http.ResponseWriter) { 
    response := Response{text} 

    jsonResponse, err := json.Marshal(response) 
    if err != nil { 
     http.Error(w, err.Error(), http.StatusInternalServerError) 
     return 
    } 

    w.Header().Set("Content-Type", "application/json") 
    w.Write(jsonResponse) 
} 

func PingHandler(w http.ResponseWriter, r *http.Request) { 
    respondJson("All good. You don't need to be authenticated to call this", w) 
} 

func SecuredPingHandler(w http.ResponseWriter, r *http.Request) { 
    respondJson("All good. You only get this message if you're authenticated", w) 
} 

Wenn ich die nicht authentifizierten Route getroffen, es funktioniert. Wenn ich die authentifizierte Route betrete, sagt es mir, dass ich ein Token brauche. Wenn ich die authentifizierte Route mit einem Token triff, das nicht richtig ist, erhalte ich die Fehlermeldung

signature is invalid 
<*errors.errorString Value> 

Also alles funktioniert. Wenn ich die authentifizierte Route mit dem richtigen Token betrete, gibt es mir den Rückgabentext. Ich kann nicht herausfinden warum. Dies ist direkt von ihrem Beispiel, obwohl ich dasselbe in meinem persönlichen Projekt bekomme.

Antwort

0

Statt

m.Get("/secured/ping", jwtMiddleware.CheckJWT, SecuredPingHandler) 

Versuchen Sie stattdessen

m.Get("/secured/ping", jwtMiddleware.Handler(SecuredPingHandler))