Compare commits

..

No commits in common. "db2755437482b7fdd0e5ac51babe92056d4b82dd" and "9656f69feaf1bd5bb9bb80afa3cc22fec4834d84" have entirely different histories.

3 changed files with 28 additions and 17 deletions

View File

@ -9,5 +9,4 @@ type ICacheAdapter interface {
Get(ctx context.Context, key string) (value interface{}, err error) Get(ctx context.Context, key string) (value interface{}, err error)
Set(ctx context.Context, key string, value interface{}, expire time.Duration) (err error) Set(ctx context.Context, key string, value interface{}, expire time.Duration) (err error)
Del(ctx context.Context, key string) (err error) Del(ctx context.Context, key string) (err error)
SetNX(ctx context.Context, key string, value interface{}, expire time.Duration) (ok bool, err error)
} }

View File

@ -8,6 +8,7 @@ import (
dysmsapi20170525 "github.com/alibabacloud-go/dysmsapi-20170525/v5/client" dysmsapi20170525 "github.com/alibabacloud-go/dysmsapi-20170525/v5/client"
util "github.com/alibabacloud-go/tea-utils/v2/service" util "github.com/alibabacloud-go/tea-utils/v2/service"
"github.com/alibabacloud-go/tea/tea" "github.com/alibabacloud-go/tea/tea"
"github.com/redis/go-redis/v9"
"time" "time"
) )
@ -80,7 +81,10 @@ func (c *SmsClient) SaveCode(ctx context.Context, key string, code string, expir
} }
//保存code //保存code
err = c.Cache.Set(ctx, key, code, expire) err = c.Cache.Set(ctx, key, code, expire)
return err if err != nil {
return err
}
return nil
} }
// DeleteCode 删除验证码 // DeleteCode 删除验证码
@ -98,18 +102,34 @@ func (c *SmsClient) SaveCodeWithFrequency(ctx context.Context, key string, code
return errors.New("缓存不能为空") return errors.New("缓存不能为空")
} }
frequencyKey := fmt.Sprintf(CodeFrequencyKey, key) frequencyKey := fmt.Sprintf(CodeFrequencyKey, key)
if frequency <= 0 { if frequency != 0 {
return errors.New("频率不能小于0") // 判断验证码是否频繁
frequencyValue, err := c.Cache.Get(ctx, frequencyKey)
if err != nil {
if errors.Is(err, redis.Nil) {
// 缓存中没有数据
fmt.Printf("缓存中没有数据")
} else {
return err
}
}
if frequencyValue != nil && frequencyValue.(string) == CodeFrequencyValue {
return errors.New("code发送频繁请稍后再试")
}
} }
ok, err := c.Cache.SetNX(ctx, frequencyKey, CodeFrequencyValue, frequency) //保存code
err = c.SaveCode(ctx, key, code, expire)
if err != nil { if err != nil {
return err return err
} }
if !ok { if frequency != 0 {
return errors.New("code发送频繁请稍后再试") // 保存验证码发送频率
err = c.Cache.Set(ctx, frequencyKey, CodeFrequencyValue, frequency)
if err != nil {
return err
}
} }
err = c.SaveCode(ctx, key, code, expire) return nil
return err
} }
// VerifyCode 校验验证码 // VerifyCode 校验验证码

View File

@ -51,14 +51,6 @@ func (r *RedisCacheAdapter) Del(ctx context.Context, key string) error {
return r.client.Del(ctx, key).Err() return r.client.Del(ctx, key).Err()
} }
func (r *RedisCacheAdapter) SetNX(ctx context.Context, key string, value interface{}, expire time.Duration) (ok bool, err error) {
data, err := json.Marshal(value)
if err != nil {
return false, err
}
return r.client.SetNX(ctx, key, data, expire).Result()
}
var ( var (
//SMS //SMS
accessKeyId = os.Getenv("SMS_ALIBABA_CLOUD_ACCESS_KEY_ID") accessKeyId = os.Getenv("SMS_ALIBABA_CLOUD_ACCESS_KEY_ID")