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

Cara menggunakan perisian tengah untuk kebenaran - gin gonic go

PHPz
Lepaskan: 2024-02-05 21:24:08
ke hadapan
1269 orang telah melayarinya

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

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

}
Salin selepas log masuk

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!

sumber:stackoverflow.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan