Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Cara menggunakan perisian tengah untuk kebenaran - gin gonic go

Cara menggunakan perisian tengah untuk kebenaran - gin gonic go

PHPz
PHPzke hadapan
2024-02-05 21:24:081187semak imbas

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

Kandungan soalan

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


Jawapan betul


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!

Kenyataan:
Artikel ini dikembalikan pada:stackoverflow.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam