Heim > Backend-Entwicklung > Golang > So verwenden Sie Middleware für die Autorisierung – Gin Gonic Go

So verwenden Sie Middleware für die Autorisierung – Gin Gonic Go

PHPz
Freigeben: 2024-02-05 21:24:08
nach vorne
1270 Leute haben es durchsucht

如何使用中间件进行授权 - gin gonic go

Frageninhalt

Ich lerne, Middleware mit dem Gin-Framework zu verwenden, bin aber auf ein Problem gestoßen

Ich möchte, dass meine test 函数 仅在满足我的 func tokenauthmiddleware Anfragen nur im Postman

auftauchen

Aber meine Testfunktion wird unabhängig davon aufgerufen, ob mein Körper ausgefüllt ist oder nicht (mit oder ohne Authentifizierung). Wie kann ich das beheben? Ich möchte, dass meine Testfunktion erst angezeigt wird, nachdem ich die mittlere Ebene durchlaufen habe

Ich habe so etwas versucht:

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()
}
Nach dem Login kopieren

Vielen Dank im Voraus


Richtige Antwort


Sie immer rufen c.next() an und die Middleware-Kette oder der Ausführungshandler werden weiter verarbeitet. Sie müssen es vermeiden, es aufzurufen, wenn das Token falsch ist.

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()
    }

}
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonSo verwenden Sie Middleware für die Autorisierung – Gin Gonic Go. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:stackoverflow.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage