You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

112 lines
2.4 KiB

package CaptchaController
import (
"dsSzxy/Utils/ConfigUtil"
"fmt"
"gitee.com/aesoper/cache"
"gitee.com/aesoper/cache/redis"
"gitee.com/aesoper/captchaStore"
"github.com/gin-gonic/gin"
"github.com/mojocn/base64Captcha"
"image/color"
"net/http"
"time"
)
// Routers 模块的路由配置
func Routers(r *gin.RouterGroup) {
rr := r.Group("/captchaRelate")
rr.GET("/getCaptcha", getCaptcha)
rr.POST("/verifyCaptcha", verifyCaptcha)
}
// CaptchaResult 存储验证码的结构
type CaptchaResult struct {
Id string `json:"id"`
Base64Blob string `json:"base_64_blob"`
}
// GetOne 生成图形化验证码
func getCaptcha(c *gin.Context) {
id, b64s := CaptMake()
captchaResult := CaptchaResult{
Id: id,
Base64Blob: b64s,
}
c.JSON(http.StatusOK, gin.H{"success": true, "captcha": captchaResult})
return
}
// Verify 验证captcha是否正确
func verifyCaptcha(c *gin.Context) {
id := c.PostForm("id")
capt := c.PostForm("capt")
if id == "" || capt == "" {
c.JSON(http.StatusOK, gin.H{"success": false, "msg": "参数错误!"})
}
if CaptVerify(id, capt) == true {
c.JSON(http.StatusOK, gin.H{"success": true})
} else {
c.JSON(http.StatusOK, gin.H{"success": false})
}
return
}
var store *captchaStore.CustomCaptchaStore
// CaptMake 生成验证码
func CaptMake() (string, string) {
// 生成默认数字
//driver := &base64Captcha.DriverDigit{
// Height: 100,
// Width: 200,
// Length: 4,
// MaxSkew: 1,
// DotCount: 2,
//}
//https://captcha.mojotv.cn/
//四则运算
driver := &base64Captcha.DriverMath{
Height: 60,
Width: 240,
NoiseCount: 0,
BgColor: &color.RGBA{
R: 52,
G: 56,
B: 98,
A: 58,
},
Fonts: []string{"wqy-microhei.ttc"},
}
driver.ConvertFonts()
//中文
// 生成base64图片
c, err := cache.New(cache.Cfg{
Driver: "redis",
Redis: redis.Options{
Addr: ConfigUtil.RedisIp + ":" + ConfigUtil.RedisPort,
},
})
if err != nil {
fmt.Println("初始化Redis服务器失败:", err)
}
store = captchaStore.NewCustomCaptchaStore(c, time.Minute*5, false)
captcha := base64Captcha.NewCaptcha(driver, store)
// 生成验证码base64字符串
id, b64s, err := captcha.Generate()
if err != nil {
fmt.Println("Register GetCaptchaPhoto get base64Captcha has err:", err)
}
return id, b64s
}
// CaptVerify 验证captcha是否正确
func CaptVerify(id string, capt string) bool {
fmt.Println("id:" + id)
fmt.Println("capt:" + capt)
return store.Verify(id, capt, false)
}