J'apprends à utiliser le middleware avec le framework gin, mais j'ai rencontré un problème
Je souhaite que mes test 函数
仅在满足我的 func tokenauthmiddleware
demandes n'apparaissent que dans Postman
Mais ma fonction de test est appelée que mon corps soit renseigné ou non (avec ou sans authentification). Comment résoudre ce problème ? Je souhaite que ma fonction de test ne s'affiche qu'après avoir traversé la couche intermédiaire
J'ai essayé quelque chose comme ceci :
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() }
Merci beaucoup d'avance
Vous toujours appelez c.next()
et il continuera à traiter la chaîne middleware ou le gestionnaire d'exécution. Vous devez éviter de l'appeler lorsque le jeton est incorrect.
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() } }
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!