Как создать модель аутентификации для restful API с помощью golang gin?

Я надеюсь создать модель аутентификации для моего спокойного API. Надеюсь использовать токен API, и я использую MVC в веб-службе, и я создал такой контроллер auth.go.

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

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


person Nuwan Indika    schedule 21.03.2016    source источник
comment
Что не работает? Вы получаете 401? Вы уверены, что токены точно совпадают (включая новые строки)?   -  person elithrar    schedule 21.03.2016
comment
Я могу выполнить этот запуск, но могу ли я узнать, как отправить токе с помощью curl? Я использую router.Use(TokenAuthMiddleware()) и получаю {"error":"API token required"}   -  person Nuwan Indika    schedule 23.03.2016


Ответы (1)


Я сделал собственное промежуточное ПО для проверки токена, как показано ниже:

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

В примере я использую Header вместо FormValue.

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

person Xeph    schedule 01.04.2016