Maison >développement back-end >Golang >Comment utiliser le middleware pour l'autorisation - gin gonic go

Comment utiliser le middleware pour l'autorisation - gin gonic go

PHPz
PHPzavant
2024-02-05 21:24:081264parcourir

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

Contenu de la question

J'apprends à utiliser le middleware avec le framework gin, mais j'ai rencontré un problème

Je souhaite que mes test 函数 仅在满足我的 func tokenauthmiddleware demandes n'apparaissent que dans Postman

Mais ma fonction de test est appelée que mon corps soit renseigné ou non (avec ou sans authentification). Comment résoudre ce problème ? Je souhaite que ma fonction de test ne s'affiche qu'après avoir traversé la couche intermédiaire

J'ai essayé quelque chose comme ceci :

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

Merci beaucoup d'avance


Bonne réponse


Vous toujours appelez c.next() et il continuera à traiter la chaîne middleware ou le gestionnaire d'exécution. Vous devez éviter de l'appeler lorsque le jeton est incorrect.

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

}

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer