Browse Source

修复 v8下redis 验证码模式 存在的未传入context的bug

main
蒋吉兆 3 years ago
parent
commit
2342a47c62
  1. 3
      server/api/v1/system/sys_captcha.go
  2. 18
      server/utils/captcha/redis.go

3
server/api/v1/system/sys_captcha.go

@ -10,7 +10,7 @@ import (
) )
// 当开启多服务器部署时,替换下面的配置,使用redis共享存储验证码 // 当开启多服务器部署时,替换下面的配置,使用redis共享存储验证码
// var store = captcha.NewDefaultRedisStore()
//var store = captcha.NewDefaultRedisStore()
var store = base64Captcha.DefaultMemStore var store = base64Captcha.DefaultMemStore
type BaseApi struct { type BaseApi struct {
@ -27,6 +27,7 @@ func (b *BaseApi) Captcha(c *gin.Context) {
// 字符,公式,验证码配置 // 字符,公式,验证码配置
// 生成默认数字的driver // 生成默认数字的driver
driver := base64Captcha.NewDriverDigit(global.GVA_CONFIG.Captcha.ImgHeight, global.GVA_CONFIG.Captcha.ImgWidth, global.GVA_CONFIG.Captcha.KeyLong, 0.7, 80) driver := base64Captcha.NewDriverDigit(global.GVA_CONFIG.Captcha.ImgHeight, global.GVA_CONFIG.Captcha.ImgWidth, global.GVA_CONFIG.Captcha.KeyLong, 0.7, 80)
//cp := base64Captcha.NewCaptcha(driver, store.UseWithCtx(c)) // v8下使用redis
cp := base64Captcha.NewCaptcha(driver, store) cp := base64Captcha.NewCaptcha(driver, store)
if id, b64s, err := cp.Generate(); err != nil { if id, b64s, err := cp.Generate(); err != nil {
global.GVA_LOG.Error("验证码获取失败!", zap.Any("err", err)) global.GVA_LOG.Error("验证码获取失败!", zap.Any("err", err))

18
server/utils/captcha/redis.go

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

Loading…
Cancel
Save