Saya sedang belajar menggunakan middleware dengan rangka kerja gin, tetapi saya menghadapi masalah
Saya mahu test 函数
仅在满足我的 func tokenauthmiddleware
permintaan saya hanya muncul dalam posmen
Tetapi fungsi ujian saya dipanggil tidak kira sama ada badan saya diisi atau tidak (dengan atau tanpa pengesahan) Bagaimana untuk membetulkannya? Saya mahu fungsi ujian saya dipaparkan hanya selepas melalui lapisan tengah
Saya mencuba sesuatu seperti ini:
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() }
Terima kasih banyak terlebih dahulu
Anda sentiasa panggilan c.next()
dan ia akan meneruskan pemprosesan rantaian middleware atau pengendali pelaksanaan. Anda perlu mengelak daripada memanggilnya apabila token tidak betul.
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() } }
Atas ialah kandungan terperinci Cara menggunakan perisian tengah untuk kebenaran - gin gonic go. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!