.NET 6 实现滑动验证码(五)、验证码设置与缓存

打印 上一主题 下一主题

主题 891|帖子 891|积分 2673

这一节,我们在Constant目录中,定义两个类CaptchaOptions.cs与CaptchaTypeConstant。目的是设置验证码的类型与其他一些属性。然后在Storage目录中,设置验证码的缓存数据。
上一节内容:.NET 6 实现滑动验证码(四)、扩展类

目录

CaptchaOptions.cs

Constant 文件夹下新建立CaptchaOptions.cs。定义验证码过期时间、缓存key值、容错值等。
  1. using SlideCaptcha.Model;
  2. using System.Collections.Generic;
  3. namespace SlideCaptcha.Constant
  4. {
  5.     public class CaptchaOptions
  6.     {
  7.         /// <summary>
  8.         /// 过期时长
  9.         /// </summary>
  10.         public int ExpirySeconds { get; set; } = 60;
  11.         /// <summary>
  12.         /// 存储键前缀
  13.         /// </summary>
  14.         public string StoreageKeyPrefix { get; set; } = "slide-captcha";
  15.         /// <summary>
  16.         /// 容错值(校验时用,缺口位置与实际滑动位置匹配容错范围)
  17.         /// </summary>
  18.         public float Tolerant { get; set; } = 0.02f;
  19.         /// <summary>
  20.         /// 背景图
  21.         /// </summary>
  22.         public List<Resource> Backgrounds { get; set; } = new List<Resource>();
  23.         /// <summary>
  24.         /// 模板图(必须是slider,notch的顺序依次出现)
  25.         /// </summary>
  26.         public List<TemplatePair> Templates { get; set; } = new List<TemplatePair>();
  27.     }
  28. }
复制代码
CaptchaTypeConstant.cs

Constant 文件夹下新建立CaptchaTypeConstant.cs。定义各种常见验证码类型:
  1. namespace SlideCaptcha.Constant
  2. {
  3.     public class CaptchaTypeConstant
  4.     {
  5.         /** 滑块. */
  6.         public static string SLIDER = "SLIDER";
  7.         /** 旋转. */
  8.         public static string ROTATE = "ROTATE";
  9.         /** 拼接.*/
  10.         public static string CONCAT = "CONCAT";
  11.         /** 图片点选.*/
  12.         public static string IMAGE_CLICK = "IMAGE_CLICK";
  13.         /** 文字图片点选.*/
  14.         public static string WORD_IMAGE_CLICK = "WORD_IMAGE_CLICK";
  15.     }
  16. }
复制代码
本次我们只实现滑块验证码。旋转、拼接、图片点选,文字图片点选暂不考虑。不过在源码中,已添加了旋转验证码的实现,目前还在测试中。
DefaultStorage.cs

Storage文件夹建立DefaultStorage.cs,定义缓存的各种方法。
  1. using Microsoft.Extensions.Caching.Distributed;
  2. using Microsoft.Extensions.Options;
  3. using Newtonsoft.Json;
  4. using SlideCaptcha.Constant;
  5. using SlideCaptcha.Interface;
  6. using System;
  7. using System.Text;
  8. namespace SlideCaptcha.Storage
  9. {
  10.     public class DefaultStorage : IStorage
  11.     {
  12.         private readonly IDistributedCache _cache;
  13.         private readonly IOptionsMonitor<CaptchaOptions> _options;
  14.         public DefaultStorage(IOptionsMonitor<CaptchaOptions> options, IDistributedCache cache)
  15.         {
  16.             _options = options;
  17.             _cache = cache;
  18.         }
  19.         private string WrapKey(string key)
  20.         {
  21.             return $"{this._options.CurrentValue.StoreageKeyPrefix}{key}";
  22.         }
  23.         public T Get<T>(string key)
  24.         {
  25.             var bytes = _cache.Get(WrapKey(key));
  26.             if (bytes == null) return default(T);
  27.             var json = Encoding.UTF8.GetString(bytes, 0, bytes.Length);
  28.             return JsonConvert.DeserializeObject<T>(json);
  29.         }
  30.         public void Remove(string key)
  31.         {
  32.             _cache.Remove(WrapKey(key));
  33.         }
  34.         public void Set<T>(string key, T value, DateTimeOffset absoluteExpiration)
  35.         {
  36.             string json = JsonConvert.SerializeObject(value);
  37.             byte[] bytes = Encoding.UTF8.GetBytes(json);
  38.             _cache.Set(WrapKey(key), bytes, new DistributedCacheEntryOptions
  39.             {
  40.                 AbsoluteExpiration = absoluteExpiration
  41.             });
  42.         }
  43.     }
  44. }
复制代码
缓存使用的是IDistributedCache 接口,方便集成在项目的时候,选择需要的缓存,如MemoryCache或Redis。
下一篇,开始写验证码图片与验证码凹槽的获取。
下载方式:
扫描公众号二维码关注我,回复captcha下载,压缩包包含了验证码类库、服务端API、HTML+JQuery完整代码、vue3组件代码及演示代码!
欢迎大家关注我的微信公众号,一起进步,一起成长
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

河曲智叟

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表