go-wxhelper/pkg/captcha/captcha.go
2024-01-19 12:06:30 +08:00

67 lines
1.4 KiB
Go

package captcha
import (
"context"
"gitee.ltd/lxh/logger/log"
"time"
"wechat-robot/internal/redis"
)
var ctx = context.Background()
type RedisStore struct{}
// 验证码缓存前缀
const cachePrefix = "captcha:img:"
// Set
// @description: 缓存验证码信息
// @receiver r
// @param id string 验证码ID
// @param value string 验证码答案
// @return error 错误信息
func (r RedisStore) Set(id string, value string) error {
key := cachePrefix + id
err := redis.Client.Set(ctx, key, value, time.Minute).Err()
if err != nil {
log.Errorf("写入缓存验证码失败: %v", err.Error())
return err
}
return nil
}
// Get
// @description: 获取验证码信息
// @receiver r
// @param id string 验证码ID
// @param clear
// @return string
func (r RedisStore) Get(id string, clear bool) string {
key := cachePrefix + id
val, err := redis.Client.Get(ctx, key).Result()
if err != nil {
log.Errorf("读取缓存验证码失败: %v", err.Error())
return ""
}
if clear {
err = redis.Client.Del(ctx, key).Err()
if err != nil {
log.Errorf("读取缓存验证码失败: %v", err.Error())
return ""
}
}
return val
}
// Verify
// @description: 验证验证码
// @receiver r
// @param id string 验证码ID
// @param answer string 验证码答案
// @param clear bool 是否清除验证码
// @return bool 是否验证成功
func (r RedisStore) Verify(id, answer string, clear bool) bool {
v := r.Get(id, clear)
return v == answer
}