2016-03-21 1 views
0

J'espère créer un modèle d'authentification pour mon API reposant. J'espère utiliser le jeton d'API et j'utilise MVC dans le service Web et j'ai créé un contrôleur auth.go comme celui-ci.Comment créer un modèle d'authentification pour une API reposante à l'aide de golang gin?

package controllers 

import (

    "github.com/gin-gonic/gin" 
    "os" 
    //"github.com/jinzhu/gorm" 

) 

type AdsControllerAuth struct { 

} 


func (ac *AdsControllerAuth)TokenAuthMiddleware gin.HandlerFunc { 
    return func(c *gin.Context) { 
    token := c.Request.FormValue("api_token") 

    if token == "" { 
     respondWithError(401, "API token required", c) 
     return 
    } 

    if token != os.Getenv("API_TOKEN") { 
     respondWithError(401, "Invalid API token", c) 
     return 
    } 

    c.Next() 
    } 
} 

func respondWithError(code int,message string,c *gin.Context) { 
    resp := map[string]string{"error": message} 

    c.JSON(code, resp) 
    //c.Abort(code) 
} 

Cela ne fonctionne pas pour l'instant quelqu'un peut-il faire cela ou est-ce qu'il y a des exemples à se référer?

+0

Qu'est-ce qui ne fonctionne pas? Avez-vous un 401? Êtes-vous sûr que les jetons correspondent exactement (y compris les sauts de ligne)? – elithrar

+0

Je peux faire cette exécution mais puis-je savoir comment envoyer toke en utilisant curl J'utilise 'router.Use (TokenAuthMiddleware())' et j'obtiens '{" error ":" Jeton API requis "}' –

Répondre

6

J'ai fait mon propre middleware pour vérifier jeton comme ci-dessous:

package main 

import (
    "github.com/gin-gonic/gin" 
) 

//JWTAuthMiddleware middleware 
func JWTAuthMiddleware() gin.HandlerFunc { 
    return func(c *gin.Context) { 
     validateToken(c) 
     c.Next() 
    } 
} 

func validateToken(c *gin.Context) { 
    token := c.Request.Header.Get("X-Auth-Token") 

    if token == "" { 
     c.AbortWithStatus(401) 
    } else if checkToken(token) { 
     c.Next() 
    } else { 
     c.AbortWithStatus(401) 
    } 
} 

Dans l'exemple, j'utilise en-tête au lieu de FormValue.

Essayez extension Chrome DHC à tester: https://chrome.google.com/webstore/detail/dhc-rest-client/aejoelaoggembcahagimdiliamlcdmfm

+0

Vous appelez c.Next() deux fois? Si la validation réussit ... – eAbi