|
@@ -0,0 +1,50 @@
|
|
|
+package captcha
|
|
|
+
|
|
|
+import (
|
|
|
+ "gin-vue-admin/global"
|
|
|
+ "time"
|
|
|
+
|
|
|
+ "github.com/mojocn/base64Captcha"
|
|
|
+ "go.uber.org/zap"
|
|
|
+)
|
|
|
+
|
|
|
+func NewDefaultRedisStore() base64Captcha.Store {
|
|
|
+ return &RedisStore{
|
|
|
+ Expiration: time.Second * 180,
|
|
|
+ PreKey: "CAPTCHA_",
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+type RedisStore struct {
|
|
|
+ Expiration time.Duration
|
|
|
+ PreKey string
|
|
|
+}
|
|
|
+
|
|
|
+func (rs *RedisStore) Set(id string, value string) {
|
|
|
+ err := global.GVA_REDIS.Set(rs.PreKey+id, value, rs.Expiration).Err()
|
|
|
+ if err != nil {
|
|
|
+ global.GVA_LOG.Error("RedisStoreSetError!", zap.Error(err))
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+func (rs *RedisStore) Get(key string, clear bool) string {
|
|
|
+ val, err := global.GVA_REDIS.Get(key).Result()
|
|
|
+ if err != nil {
|
|
|
+ global.GVA_LOG.Error("RedisStoreGetError!", zap.Error(err))
|
|
|
+ return ""
|
|
|
+ }
|
|
|
+ if clear {
|
|
|
+ err := global.GVA_REDIS.Del(key).Err()
|
|
|
+ if err != nil {
|
|
|
+ global.GVA_LOG.Error("RedisStoreClearError!", zap.Error(err))
|
|
|
+ return ""
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return val
|
|
|
+}
|
|
|
+
|
|
|
+func (rs *RedisStore) Verify(id, answer string, clear bool) bool {
|
|
|
+ key := rs.PreKey + id
|
|
|
+ v := rs.Get(key, clear)
|
|
|
+ return v == answer
|
|
|
+}
|