首頁 >後端開發 >Golang >Gin框架中的驗證碼使用實例

Gin框架中的驗證碼使用實例

PHPz
PHPz原創
2023-06-23 08:10:451873瀏覽

隨著網路的普及,驗證碼已經成為了登入、註冊、找回密碼等操作的必要流程。在Gin框架中,實作驗證碼功能也變得異常簡單。

本文將介紹如何在Gin框架中使用第三方函式庫實作驗證碼功能,並提供範例程式碼供讀者參考。

一、安裝依賴函式庫

在使用驗證碼之前,我們需要安裝一個第三方函式庫goCaptcha。

安裝goCaptcha可以使用go get指令:

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

二、產生驗證碼

goCaptcha提供了三種驗證碼類型,包括數字驗證碼、字母驗證碼和數字字母混合驗證碼。接下來我們將以數位驗證碼為例,示範如何產生驗證碼。

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

在上述程式碼中,我們使用NewDriverDigit函數建立一個驗證碼產生器。函數的參數依序表示圖片寬度、高度、驗證碼長度、雜訊強度和乾擾線條數。接著我們使用NewCaptcha函數建立驗證碼對象,並呼叫Generate方法產生驗證碼。

三、將驗證碼傳送給客戶端

產生驗證碼後,我們需要將其傳送給客戶端。在Gin框架中,可以使用ResponseWriter.Write函數寫入響應體。

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

在上述程式碼中,我們建立了一個/captcha的路由,透過SetCookie方法傳遞驗證碼ID,將產生的文字驗證碼透過ResponseWriter物件寫入回應體。

四、驗證驗證碼

當使用者在表單中輸入驗證碼並提交後,我們需要透過驗證碼ID來取得驗證碼並驗證其正確性。在Go中,我們可以使用MemStore物件來儲存和取得驗證碼。

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

在上述程式碼中,我們建立了一個/login的路由,其中​​首先透過Cookie取得驗證碼ID,然後透過PostForm取得使用者輸入的驗證碼,最後使用驗證碼物件的Verify方法驗證驗證碼的正確性。

五、總結

本文介紹了在Gin框架中使用goCaptcha實作驗證碼功能的方法。首先透過NewDriverDigit函數產生驗證碼產生器,然後使用NewCaptcha函數建立驗證碼對象,並使用Generate方法產生驗證碼。最後透過ResponseWriter向客戶端發送驗證碼,並透過Cookie傳遞驗證碼ID,使用MemStore物件來儲存驗證碼,並在登入時驗證驗證碼的正確性。

在實際開發中,我們可以根據需求自訂驗證碼的各種參數,並將其與其他功能結合起來,為使用者提供更豐富的功能體驗。

以上是Gin框架中的驗證碼使用實例的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn