package redisstore import ( "apsClient/pkg/logx" "apsClient/pkg/redisx" "context" "github.com/mojocn/base64Captcha" "time" ) type Captcha struct { Expiration time.Duration PreKey string Context context.Context } func NewCaptcha() *Captcha { return &Captcha{ Expiration: time.Second * 180, PreKey: "CAPTCHA_", } } func (rs *Captcha) UseWithCtx(ctx context.Context) base64Captcha.Store { rs.Context = ctx return rs } func (rs *Captcha) Set(id string, value string) { err := redisx.GetRedisClient().Set(rs.Context, rs.PreKey+id, value, rs.Expiration).Err() if err != nil { logx.Errorf("RedisStoreSetError! err:%v", err) } } func (rs *Captcha) Get(key string, clear bool) string { val, err := redisx.GetRedisClient().Get(rs.Context, key).Result() if err != nil { logx.Errorf("RedisStoreGetError! err:%v", err) return "" } if clear { err := redisx.GetRedisClient().Del(rs.Context, key).Err() if err != nil { logx.Errorf("RedisStoreClearError! err:%v", err) return "" } } return val } func (rs *Captcha) Verify(id, answer string, clear bool) bool { key := rs.PreKey + id v := rs.Get(key, clear) return v == answer }