我正在學習使用帶有 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中文網其他相關文章!