我正在学习使用带有 gin 框架的中间件,但我遇到了一个问题
我希望我的 test 函数
仅在满足我的 func tokenauthmiddleware
的要求时才显示在 postman 中
但是无论我的正文是否填写,我的测试函数都会被调用(有或没有身份验证)如何解决这个问题? 我希望我的测试函数仅在经过中间层后才显示
我尝试过这样的事情:
package main import ( "log" "net/http" "os" "github.com/gin-gonic/gin" "github.com/joho/godotenv" ) func TokenAuthMiddleware() gin.HandlerFunc { err := godotenv.Load(".env") if err != nil { log.Fatal("Erro ao ler variaveis de ambiente") } requiredToken := os.Getenv("API_TOKEN") if requiredToken == "" { log.Fatal("Por favor, defina a variavel API_TOKEN") } return func(c *gin.Context) { token := c.Request.FormValue("api_token") if token == "" { c.JSON(http.StatusBadRequest, gin.H{"message": "Token deve ser preenchido"}) } else if token != requiredToken { c.JSON(http.StatusBadRequest, gin.H{"message": "Token invalido"}) } c.Next() } } func Teste(c *gin.Context) { c.JSON(http.StatusOK, gin.H{ "sucess": "so beautiful", }) } func main() { api := gin.New() v1 := api.Group("v1") v1.Use(TokenAuthMiddleware()) v1.GET("/", Teste) api.Run() }
提前非常感谢
您总是调用 c.next()
,它会继续处理中间件链或执行处理程序。当令牌不正确时,您需要避免调用它。
func TokenAuthMiddleware() gin.HandlerFunc { err := godotenv.Load(".env") if err != nil { log.Fatal("Erro ao ler variaveis de ambiente") } requiredToken := os.Getenv("API_TOKEN") if requiredToken == "" { log.Fatal("Por favor, defina a variavel API_TOKEN") } return func(c *gin.Context) { token := c.Request.FormValue("api_token") if token == "" { c.JSON(http.StatusBadRequest, gin.H{"message": "Token deve ser preenchido"}) return } if token != requiredToken { c.JSON(http.StatusBadRequest, gin.H{"message": "Token invalido"}) return } c.Next() } }
以上是如何使用中间件进行授权 - gin gonic go的详细内容。更多信息请关注PHP中文网其他相关文章!