| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455 |
- package verifycode
- import (
- "time"
- "github.com/runningwater/gohub/pkg/app"
- "github.com/runningwater/gohub/pkg/config"
- "github.com/runningwater/gohub/pkg/redis"
- )
- // RedisStore 实现了 verifycode.Store 接口
- // 验证码存储在 Redis 中
- // 键名格式为:keyPrefix:code
- type RedisStore struct {
- RedisClient *redis.RedisClient
- KeyPrefix string
- }
- // 保存验证码
- func (s *RedisStore) Set(key string, value string) bool {
- expirTime := time.Minute * time.Duration(config.GetInt64("verifycode.expire_time"))
- // 本地环境方便调试
- if app.IsLocal() {
- expirTime = time.Minute * time.Duration(config.GetInt64("verifycode.debug_expire_time"))
- }
- // 生成 Redis 键名
- redisKey := s.KeyPrefix + key
- // 设置 Redis 键值
- return s.RedisClient.Set(redisKey, value, expirTime)
- }
- // 获取验证码
- func (s *RedisStore) Get(key string, clear bool) string {
- key = s.KeyPrefix + key
- val := s.RedisClient.Get(key)
- if clear {
- s.RedisClient.Del(key)
- }
- return val
- }
- // 检查验证码是否正确
- func (s *RedisStore) Verify(key, answer string, clear bool) bool {
- v := s.Get(key, clear)
- return v == answer
- }
- func NewRedisStore() *RedisStore {
- return &RedisStore{
- RedisClient: redis.Redis,
- KeyPrefix: config.GetString("app.name") + ":verifycode:",
- }
- }
|