store_reids.go 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. package verifycode
  2. import (
  3. "time"
  4. "github.com/runningwater/gohub/pkg/app"
  5. "github.com/runningwater/gohub/pkg/config"
  6. "github.com/runningwater/gohub/pkg/redis"
  7. )
  8. // RedisStore 实现了 verifycode.Store 接口
  9. // 验证码存储在 Redis 中
  10. // 键名格式为:keyPrefix:code
  11. type RedisStore struct {
  12. RedisClient *redis.RedisClient
  13. KeyPrefix string
  14. }
  15. // 保存验证码
  16. func (s *RedisStore) Set(key string, value string) bool {
  17. expirTime := time.Minute * time.Duration(config.GetInt64("verifycode.expire_time"))
  18. // 本地环境方便调试
  19. if app.IsLocal() {
  20. expirTime = time.Minute * time.Duration(config.GetInt64("verifycode.debug_expire_time"))
  21. }
  22. // 生成 Redis 键名
  23. redisKey := s.KeyPrefix + key
  24. // 设置 Redis 键值
  25. return s.RedisClient.Set(redisKey, value, expirTime)
  26. }
  27. // 获取验证码
  28. func (s *RedisStore) Get(key string, clear bool) string {
  29. key = s.KeyPrefix + key
  30. val := s.RedisClient.Get(key)
  31. if clear {
  32. s.RedisClient.Del(key)
  33. }
  34. return val
  35. }
  36. // 检查验证码是否正确
  37. func (s *RedisStore) Verify(key, answer string, clear bool) bool {
  38. v := s.Get(key, clear)
  39. return v == answer
  40. }
  41. func NewRedisStore() *RedisStore {
  42. return &RedisStore{
  43. RedisClient: redis.Redis,
  44. KeyPrefix: config.GetString("app.name") + ":verifycode:",
  45. }
  46. }