2016-03-21 9 views
0

Надеюсь создать модель аутентификации для моего успокоительного API. Надеюсь использовать маркер API, и я использую MVC в веб-службе, и я создал контроллер auth.go, как это.Как создать модель аутентификации для успокаивающего API с помощью 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) 
} 

На данный момент это не работает, может ли кто-нибудь помочь сделать это или есть какие-либо примеры для ссылки?

+0

Что не работает? Вы получаете 401? Вы уверены, что токены точно совпадают (в том числе и с символами новой строки)? – elithrar

+0

Я могу выполнить этот прогон, но могу ли я узнать, как отправить toke на использование curl. Я использую 'router.Use (TokenAuthMiddleware())' и я получаю '{" error ":" Необходимый токен API "}' –

ответ

6

Я сделал свой собственный промежуточное программное обеспечение, чтобы проверить маркер, как показано ниже:

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) 
    } 
} 

В примере, я использую заголовок вместо FormValue.

Попробуйте расширение Chrome DHC для теста: https://chrome.google.com/webstore/detail/dhc-rest-client/aejoelaoggembcahagimdiliamlcdmfm

+0

Вы вызываете c.Next() дважды? Если проверка прошла успешно ... – eAbi