1. 程式人生 > 其它 >Gin 中使用 base64Captcha 生成圖形驗證 碼以及分散式架構中配置 Captcha

Gin 中使用 base64Captcha 生成圖形驗證 碼以及分散式架構中配置 Captcha

Gin 中使用 base64Captcha 生成圖形驗證 碼以及分散式架構中配置 Captcha

https://github.com/mojocn/base64Captcha
captcha.mojotv.cn
package models
import (
	"github.com/mojocn/base64Captcha"
	"image/color"
)


// 設定自帶的 store(可以配置成redis)
var store = base64Captcha.DefaultMemStore

//獲取驗證碼
func MakeCaptcha() (id, b64s string, err error) {
	var driver base64Captcha.Driver
	//配置驗證碼的引數
	driverString := base64Captcha.DriverString{
		Height: 40,
		Width: 100,
		NoiseCount: 0,
		ShowLineOptions: 2 | 4,
		Length: 4,
		Source: "1234567890qwertyuioplkjhgfdsazxcvbnm",
		BgColor: &color.RGBA{ R: 3, G: 102, B: 214, A: 125, },
		Fonts: []string{"wqy-microhei.ttc"},
	}
	//ConvertFonts 按名稱載入字型
	driver = driverString.ConvertFonts()
	//建立 Captcha
	captcha := base64Captcha.NewCaptcha(driver, store)
	//Generate 生成隨機 id、base64 影象字串
	id, b64s, err = captcha.Generate()
	return id, b64s, err


}

//驗證驗證碼
func VerifyCaptcha(id string, capt string)bool{
	if store.Verify(id, capt, false){
		//驗證成功
		return true
	} else{
		//驗證失敗
		return false
	}
}

控制器中呼叫

func (con LoginController) Captcha(c *gin.Context) {
	id, b64s, err:=models.MakeCaptcha()
	if err != nil {
		//失敗
		fmt.Println(err)
	}
	c.JSON(200,gin.H{
		"CaptchaId":id,
		"CaptchaImage":b64s,//驗證碼的url地址
	})
}