Rumah >pembangunan bahagian belakang >Golang >Contoh penggunaan kod pengesahan dalam rangka kerja Gin

Contoh penggunaan kod pengesahan dalam rangka kerja Gin

PHPz
PHPzasal
2023-06-23 08:10:451872semak imbas

Dengan populariti Internet, kod pengesahan telah menjadi proses yang diperlukan untuk log masuk, pendaftaran, mendapatkan kata laluan dan operasi lain. Dalam rangka kerja Gin, melaksanakan fungsi kod pengesahan telah menjadi sangat mudah.

Artikel ini akan memperkenalkan cara menggunakan pustaka pihak ketiga untuk melaksanakan fungsi kod pengesahan dalam rangka kerja Gin dan menyediakan kod sampel untuk rujukan pembaca.

1. Pasang pustaka bergantung

Sebelum menggunakan kod pengesahan, kami perlu memasang pustaka pihak ketiga goCaptcha.

Untuk memasang goCaptcha, anda boleh menggunakan arahan go get:

$ go get -u github.com/mojocn/base64Captcha

2 Jana kod pengesahan

goCaptcha menyediakan tiga jenis kod pengesahan, termasuk kod pengesahan berangka, pengesahan surat. kod dan kod pengesahan Alphanumeric. Seterusnya, kami akan mengambil kod pengesahan digital sebagai contoh untuk menunjukkan cara menjana kod pengesahan.

package main

import (
    "fmt"
    "github.com/gin-gonic/gin"
    b64 "github.com/mojocn/base64Captcha"
)

func main() {
    // 以下是生成验证码的代码
    driver := b64.NewDriverDigit(80, 240, 6, 0.7, 80)
    captcha := b64.NewCaptcha(driver, b64.DefaultMemStore)
    id, b64s, err := captcha.Generate()
    if err != nil {
        fmt.Println(err.Error())
    }
    fmt.Println(id, b64s)
}

Dalam kod di atas, kami menggunakan fungsi NewDriverDigit untuk mencipta penjana kod pengesahan. Parameter fungsi berturut-turut mewakili lebar imej, ketinggian, panjang kod pengesahan, keamatan hingar dan bilangan garisan gangguan. Kemudian kami menggunakan fungsi NewCaptcha untuk mencipta objek kod pengesahan dan memanggil kaedah Generate untuk menjana kod pengesahan.

3. Hantar kod pengesahan kepada pelanggan

Selepas menjana kod pengesahan, kami perlu menghantarnya kepada pelanggan. Dalam rangka kerja Gin, anda boleh menggunakan fungsi ResponseWriter.Write untuk menulis badan tindak balas.

package main

import (
    "fmt"
    "github.com/gin-gonic/gin"
    b64 "github.com/mojocn/base64Captcha"
)

func main() {
    router := gin.Default()

    // 以下是生成验证码的代码
    driver := b64.NewDriverDigit(80, 240, 6, 0.7, 80)
    captcha := b64.NewCaptcha(driver, b64.DefaultMemStore)
    router.GET("/captcha", func(c *gin.Context) {
        id, b64s, err := captcha.Generate()
        if err != nil {
            fmt.Println(err.Error())
            c.String(500, err.Error())
            return
        }
        c.SetCookie("captcha_id", id, 300, "/", "localhost", false, true)
        c.Data(200, "image/png", []byte(b64s))
    })

    router.Run(":8080")
}

Dalam kod di atas, kami mencipta laluan /captcha, lulus ID kod pengesahan melalui kaedah SetCookie dan menulis kod pengesahan teks yang dijana ke dalam badan respons melalui objek ResponseWriter.

4. Pengesahan kod pengesahan

Apabila pengguna memasukkan kod pengesahan dalam borang dan menyerahkannya, kami perlu mendapatkan kod pengesahan melalui ID kod pengesahan dan mengesahkan ketepatannya. Dalam Go, kami boleh menggunakan objek MemStore untuk menyimpan dan mendapatkan semula kod pengesahan.

package main

import (
    "fmt"
    "github.com/gin-gonic/gin"
    b64 "github.com/mojocn/base64Captcha"
)

func main() {
    router := gin.Default()

    // 以下是生成验证码的代码
    driver := b64.NewDriverDigit(80, 240, 6, 0.7, 80)
    captcha := b64.NewCaptcha(driver, b64.DefaultMemStore)
    router.GET("/captcha", func(c *gin.Context) {
        id, b64s, err := captcha.Generate()
        if err != nil {
            fmt.Println(err.Error())
            c.String(500, err.Error())
            return
        }
        c.SetCookie("captcha_id", id, 300, "/", "localhost", false, true)
        c.Data(200, "image/png", []byte(b64s))
    })

    // 以下是验证验证码的代码
    router.POST("/login", func(c *gin.Context) {
        captchaId, err := c.Cookie("captcha_id")
        if err != nil {
            fmt.Println(err.Error())
            c.String(400, "未生成验证码")
            return
        }
        captchaVal := c.PostForm("captcha_val")
        if captchaVal == "" {
            c.String(400, "请输入验证码")
            return
        }
        if !captcha.Verify(captchaId, captchaVal) {
            c.String(400, "验证码错误")
            return
        }
        c.String(200, "登录成功")
    })

    router.Run(":8080")
}

Dalam kod di atas, kami mencipta laluan /log masuk, yang mula-mula memperoleh ID kod pengesahan melalui Kuki, kemudian memperoleh kod pengesahan yang dimasukkan oleh pengguna melalui PostForm, dan akhirnya menggunakan kaedah Pengesahan pengesahan objek kod untuk mengesahkan ketepatan kod.

5. Ringkasan

Artikel ini memperkenalkan cara menggunakan goCaptcha untuk melaksanakan fungsi kod pengesahan dalam rangka kerja Gin. Mula-mula jana penjana kod pengesahan melalui fungsi NewDriverDigit, kemudian gunakan fungsi NewCaptcha untuk mencipta objek kod pengesahan, dan gunakan kaedah Generate untuk menjana kod pengesahan. Akhir sekali, kod pengesahan dihantar kepada pelanggan melalui ResponseWriter, ID kod pengesahan dihantar melalui Cookie, objek MemStore digunakan untuk menyimpan kod pengesahan, dan ketepatan kod pengesahan disahkan semasa log masuk.

Dalam pembangunan sebenar, kami boleh menyesuaikan pelbagai parameter kod pengesahan mengikut keperluan dan menggabungkannya dengan fungsi lain untuk memberikan pengguna pengalaman berfungsi yang lebih kaya.

Atas ialah kandungan terperinci Contoh penggunaan kod pengesahan dalam rangka kerja Gin. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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