首頁  >  文章  >  後端開發  >  如何使用中介軟體進行授權 - gin gonic go

如何使用中介軟體進行授權 - gin gonic go

PHPz
PHPz轉載
2024-02-05 21:24:081187瀏覽

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

問題內容

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

陳述:
本文轉載於:stackoverflow.com。如有侵權,請聯絡admin@php.cn刪除