NET 6 实现滑动验证码(三)、接口

题外话,有网友说,这玩意根本很容易破解,确实是这样。但验证码这东西,就跟锁子很类似,防君子不防小人。验证码的发明其实是社会文明的退步。因为它阻碍了真正的使用者,却无法阻挡别有用心的人。但又有什么办法呢?

上一篇文章添加了一些基本类,本篇内容主要目的是创建一些接口类

上一节内容:NET 6 实现滑动验证码(二)、基本数据


目录
  • ValidateResult.cs
  • ICaptcha.cs
  • IResourceHandler.cs
  • IResourceHandlerManager.cs
  • IResourceManager.cs
  • IResourceProvider.cs
  • ISliderCaptchaImageGenerator.cs
  • IStorage.cs
  • IValidator.cs

ValidateResult.cs

在项目根目录下,创建ValidateResult.cs。其功能是提供验证后返回的信息

namespace SlideCaptcha
{
    public class ValidateResult
    {
        public ValidateResultType Result { get; set; }
        public string Message { get; set; }
        public static ValidateResult Success()
        {
            return new ValidateResult { Result = ValidateResultType.Success, Message = "成功" };
        }
        public static ValidateResult Fail()
        {
            return new ValidateResult { Result = ValidateResultType.ValidateFail, Message = "验证失败" };
        }
        public static ValidateResult Timeout()
        {
            return new ValidateResult { Result = ValidateResultType.Timeout, Message = "验证超时" };
        }
        public enum ValidateResultType
        {
            Success = 0,
            ValidateFail = 1,
            Timeout = 2
        }
    }
}

ICaptcha.cs

在Interface文件夹下,建一个ICaptcha.cs,用于生成验证码和进行校验。

using SlideCaptcha.Model;
using System.Threading.Tasks;
namespace SlideCaptcha.Interface
{
    public interface ICaptcha
    {
        /// <summary>
        /// 生成验证码
        /// </summary>
        /// <param name="captchaId">验证码id</param>
        /// <returns></returns>
        Task<CaptchaData> GenerateCaptchaImageAsync(string type, string captchaId = null);
        /// <summary>
        /// 校验
        /// </summary>
        /// <param name="captchaId">验证码id</param>
        /// <param name="slideTrack">滑动轨迹</param>
        /// <returns></returns>
        ValidateResult Validate(string captchaId, SlideTrack slideTrack);
    }
}

IResourceHandler.cs

IResourceHandler.cs 用于生成验证码资源(验证码模板)。

using SlideCaptcha.Model;
using System.Threading.Tasks;
namespace SlideCaptcha.Interface
{
    public interface IResourceHandler
    {
        /// <summary>
        /// 判断传入的资源类型是否存在
        /// </summary>
        /// <param name="handlerType"></param>
        /// <returns></returns>
        bool CanHandle(string handlerType);
        /// <summary>
        /// 生成资源
        /// </summary>
        /// <param name="resource"></param>
        /// <returns></returns>
        Task<byte[]> Handle(Resource resource);
    }
}

IResourceHandlerManager.cs

IResourceHandlerManager.cs用于根据资源(验证码模板),获取资源byte[]数据。

using SlideCaptcha.Model;
using System.Threading.Tasks;
namespace SlideCaptcha.Interface
{
    public interface IResourceHandlerManager
    {
        /// <summary>
        /// 根据资源,生成所需要的byte[]
        /// </summary>
        /// <param name="resource"></param>
        /// <returns></returns>
        Task<byte[]> Handle(Resource resource);
    }
}

IResourceManager.cs

IResourceManager.cs用于获取验证码背景数据与验证码模板数据

using System.Threading.Tasks;
namespace SlideCaptcha.Interface
{
    public interface IResourceManager
    {
        /// <summary>
        /// 随机获取验证码图片背景
        /// </summary>
        /// <returns></returns>
       Task<byte[]> RandomBackground();
       /// <summary>
       /// 随机获取模板
       /// </summary>
       /// <param name="type">模板类型,滑动、旋转、点选</param>
       /// <returns></returns>
       Task<(byte[], byte[])> RandomTemplate(string type);
    }
}

IResourceProvider.cs

IResourceProvider.cs用于提供验证码背景图片与模板图片的List

using SlideCaptcha.Model;
using System.Collections.Generic;
namespace SlideCaptcha.Interface
{
    public interface IResourceProvider
    {
        /// <summary>
        /// 提供验证码背景图片
        /// </summary>
        /// <returns></returns>
        List<Resource> Backgrounds();
        /// <summary>
        /// 提供模板资源
        /// </summary>
        /// <returns></returns>
        List<TemplatePair> Templates();
    }
}

ISliderCaptchaImageGenerator.cs

ISliderCaptchaImageGenerator.cs用于生成滑动验证码

using SlideCaptcha.Model;
using System.Threading.Tasks;
namespace SlideCaptcha.Interface
{
    public interface ISliderCaptchaImageGenerator
    {
        /// <summary>
        /// 生成滑动验证码
        /// </summary>
        /// <param name="captchaId">验证码ID</param>
        /// <returns></returns>
        Task<SliderImageCaptchaInfo> Generate(string captchaId);
    }
}

IStorage.cs

IStorage.cs 用于缓存的操作

using System;
namespace SlideCaptcha.Interface
{
    public interface IStorage
    {
        /// <summary>
        /// 设置缓存
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="key"></param>
        /// <param name="value"></param>
        /// <param name="absoluteExpiration"></param>
        void Set<T>(string key, T value, DateTimeOffset absoluteExpiration);
        /// <summary>
        /// 获取缓存
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="key"></param>
        /// <returns></returns>
        T Get<T>(string key);
        /// <summary>
        /// 删除缓存
        /// </summary>
        /// <param name="key"></param>
        void Remove(string key);
    }
}

IValidator.cs

IValidator.cs 用于提供校验验证码数据。

using SlideCaptcha.Model;
namespace SlideCaptcha.Interface
{
    public interface IValidator
    {
        /// <summary>
        /// 校验验证码数据
        /// </summary>
        /// <param name="slideTrack">滑动</param>
        /// <param name="captchaValidateData">校验</param>
        /// <returns></returns>
        bool Validate(SlideTrack slideTrack, CaptchaValidateData captchaValidateData);
    }
}

下载地址(包括验证码源码、服务端API示例、前端代码有HTML+JQyeryt、vue3两个示例)

https://pan.baidu.com/s/19mx24FXrnqz9u2mmFqlr6g?pwd=7636

© 版权声明
好牛新坐标
版权声明:
1、IT大王遵守相关法律法规,由于本站资源全部来源于网络程序/投稿,故资源量太大无法一一准确核实资源侵权的真实性;
2、出于传递信息之目的,故IT大王可能会误刊发损害或影响您的合法权益,请您积极与我们联系处理(所有内容不代表本站观点与立场);
3、因时间、精力有限,我们无法一一核实每一条消息的真实性,但我们会在发布之前尽最大努力来核实这些信息;
4、无论出于何种目的要求本站删除内容,您均需要提供根据国家版权局发布的示范格式
《要求删除或断开链接侵权网络内容的通知》:https://itdw.cn/ziliao/sfgs.pdf,
国家知识产权局《要求删除或断开链接侵权网络内容的通知》填写说明: http://www.ncac.gov.cn/chinacopyright/contents/12227/342400.shtml
未按照国家知识产权局格式通知一律不予处理;请按照此通知格式填写发至本站的邮箱 wl6@163.com

相关文章