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
PHPznach vorne
2024-02-05 21:24:081264Durchsuche

如何使用中间件进行授权 - 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()
}

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

}

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!

Stellungnahme:
Dieser Artikel ist reproduziert unter:stackoverflow.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen