代码拉取完成,页面将自动刷新
package kk_captcha
import (
"gitee.com/cruvie/kk_go_kit/kk_log"
"gitee.com/cruvie/kk_go_kit/kk_redis"
"github.com/mojocn/base64Captcha"
"log/slog"
"strings"
"time"
)
// redisStore 由于服务器是负载均衡,所以需要用redis来替代默认的store 如果是单台服务器,不需要redis来管理
type redisStore struct {
expiration time.Duration
}
func (rs *redisStore) Set(id string, value string) error {
key := string(captchaKey) + id
//转换成小写存进redis
err := kk_redis.Set(key, strings.ToLower(value), rs.expiration)
if err != nil {
slog.Error("unable to set captcha to redis", kk_log.NewLog(nil).Error(err).Args()...)
return err
}
return nil
}
func (rs *redisStore) Get(id string, clear bool) string {
key := string(captchaKey) + id
code, err := kk_redis.Get(key)
if err != nil {
slog.Error("unable to get captcha from redis", kk_log.NewLog(nil).Error(err).Args()...)
return ""
}
if clear {
err := kk_redis.Del(key)
if err != nil {
slog.Error("unable to delete captcha in redis", kk_log.NewLog(nil).Error(err).Args()...)
}
}
return code
}
func (rs *redisStore) Verify(id string, answer string, clear bool) bool {
v := rs.Get(id, clear)
return v == strings.ToLower(answer)
}
func newRedisStore(expiration time.Duration) base64Captcha.Store {
s := new(redisStore)
s.expiration = expiration
return s
}
// 过期时间2分钟
var store = newRedisStore(2 * time.Minute)
// GenerateCaptcha 验证码生成
func GenerateCaptcha() (id string, b64s string, err error) {
driver := mathConfig()
// 创建验证码并传入创建的类型的配置,以及存储的对象
c := base64Captcha.NewCaptcha(driver, store)
id, b64s, _, err = c.Generate()
if err != nil {
return "", "", err
}
return id, b64s, err
}
func VerifyCaptcha(id string, answer string) (res bool) {
return store.Verify(id, answer, true)
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。