3

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

 1 year ago
source link: https://www.cnblogs.com/gmval/p/16934788.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

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

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

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


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


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK