Browse Source

add captcha redis

liaoyongfu 3 years ago
parent
commit
d023905653
1 changed files with 50 additions and 0 deletions
  1. 50 0
      server/utils/captcha/redis.go

+ 50 - 0
server/utils/captcha/redis.go

@@ -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
+}