captcha_redis.go 950 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. package services
  2. import (
  3. "eta/eta_mobile/utils"
  4. "fmt"
  5. "time"
  6. )
  7. // CaptchaRedis Redis验证器
  8. type CaptchaRedis struct{}
  9. // Set 实现验证器set方法
  10. func (r CaptchaRedis) Set(id string, value string) (err error) {
  11. if utils.Rc == nil {
  12. err = fmt.Errorf("redis config err")
  13. return
  14. }
  15. key := utils.CaptchaCachePrefix + id
  16. b := utils.Rc.SetNX(key, value, time.Minute*5)
  17. if !b {
  18. err = fmt.Errorf("redis setnx err")
  19. }
  20. return
  21. }
  22. // Get 实现原验证器get方法
  23. func (r CaptchaRedis) Get(id string, clear bool) (code string) {
  24. if utils.Rc == nil {
  25. return
  26. }
  27. key := utils.CaptchaCachePrefix + id
  28. val, err := utils.Rc.RedisString(key)
  29. if err != nil {
  30. return
  31. }
  32. code = val
  33. // clear为true时验证通过删除验证码
  34. if clear {
  35. _ = utils.Rc.Delete(key)
  36. }
  37. return
  38. }
  39. // Verify 实现原验证器verify方法
  40. func (r CaptchaRedis) Verify(id, answer string, clear bool) bool {
  41. v := r.Get(id, clear)
  42. return v == answer
  43. }