2

我希望为我的 restful API 创建一个身份验证模型。希望使用 API 令牌,我在 Web 服务中使用 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)
}

它现在不起作用可以有人帮助做到这一点还是有任何例子可以参考?

4

1 回答 1

10

我制作了自己的中间件来检查令牌,如下所示:

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

于 2016-04-01T14:35:20.480 回答