博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
使用.Net Core实现的一个图形验证码
阅读量:4032 次
发布时间:2019-05-24

本文共 2722 字,大约阅读时间需要 9 分钟。

SimpleCaptcha是一个使用简单,基于.Net Standard 2.0的图形验证码模块。它的灵感来源于Edi.Wang的这篇文章https://edi.wang/post/2018/10/13/generate-captcha-code-aspnet-core,我将其中生成验证码的代码抽取出来进行封装得到了这个模块。下面介绍一下使用方式。

基本使用方式

安装SimpleCaptcha

在Nuget中搜索安装SimpleCaptcha

安装缓存模块

SimpleCaptcha依赖Microsoft.Extensions.Caching.Abstractions模块用来存储验证码,所以你需要在项目中根据自己的需要安装相应的实现包,例如这里我使用Microsoft.Extensions.Caching.Memory

Startup

修改Startup.cs文件注入相应的服务:

services.AddMemoryCache()    .AddSimpleCaptcha(builder =>    {        builder.UseMemoryStore();    });

注入ICaptcha接口

在Controller中注入核心接口ICaptcha

private readonly ICaptcha _captcha;public HomeController(ICaptcha captcha){    _captcha = captcha;}

生成验证码

使用ICaptcha接口的Generate方法生成验证码

public IActionResult Captcha(string id){    var info = _captcha.Generate(id);    var stream = new MemoryStream(info.CaptchaByteData);    return File(stream, "image/png");}

验证

使用ICaptcha接口的Validate方法对用户的提交进行验证

public IActionResult Validate(string id, string code){    var result = _captcha.Validate(id, code);    return Json(new { success = result });}

完整的例子可以在这里找到:https://github.com/1992w/SimpleCaptcha/tree/master/src/SimpleCaptcha.Demo

配置

SimpleCaptcha预留了一些默认的配置项,你可以根据需要自行修改。

设置验证码长度

services.AddSimpleCaptcha(builder =>{    builder.AddConfiguration(options =>    {        options.CodeLength = 6;    });});

设置图片大小

services.AddSimpleCaptcha(builder =>{    builder.AddConfiguration(options =>    {        options.ImageWidth = 100;        options.ImageHeight = 36;    });});

设置区分大小写

默认情况下验证不区分大小写

services.AddSimpleCaptcha(builder =>{    builder.AddConfiguration(options =>    {        options.IgnoreCase = false;    });});

设置验证码有效期

验证码默认的有效期为5分钟

services.AddSimpleCaptcha(builder =>{    builder.AddConfiguration(options =>    {        options.ExpiryTime =TimeSpan.FromMinutes(10);    });});

设置字符集

SimpleCaptcha提供了ICaptchaCodeGenerator接口用来生成字符,默认的实现是从字符集012346789ABCDEFGHIJKLMNOPQRSTUVWXYZ中随机生成,你可以继承ICaptchaCodeGenerator接口实现自己的需求。

public class MyCaptchaCodeGenerator : ICaptchaCodeGenerator{    public string Generate(int length)    {        throw new NotImplementedException();    }}

配置自己的生成器

services.AddSimpleCaptcha(builder =>{    builder.AddConfiguration(options =>    {        options.CodeGenerator = new MyCaptchaCodeGenerator();    });});

设置个性化的图片

如果默认生成的图片你觉得不符合你的要求,你可以实现ICaptchaImageGenerator接口进行修改

public class CaptchaImageGenerator : ICaptchaImageGenerator{    public byte[] Generate(int width, int height, string captchaCode)    {        throw new NotImplementedException();    }}
services.AddSimpleCaptcha(builder =>{    builder.AddConfiguration(options =>    {        options.ImageGenerator = new CaptchaImageGenerator();    });});

源代码

所有源代码可以在这里获取:https://github.com/1992w/SimpleCaptcha

感谢

在这里感谢Edi.Wang分享。

最后

欢迎你对这个模块提出任何的建议和想法。

转载地址:http://snzdi.baihongyu.com/

你可能感兴趣的文章
慢慢欣赏linux 文件黑洞和文件空洞
查看>>
慢慢欣赏linux 截断文件
查看>>
慢慢欣赏linux 数据类型
查看>>
中断学习之timer_interrupt powerpc实现
查看>>
慢慢欣赏linux 死锁检测
查看>>
慢慢欣赏linux exec加载执行程序
查看>>
慢慢欣赏linux 页框lru的作用
查看>>
慢慢欣赏linux glibc相关
查看>>
慢慢欣赏linux PCI-PCIE初始化总结
查看>>
慢慢欣赏linux PCI-PCIE定制化
查看>>
慢慢欣赏git
查看>>
慢慢欣赏linux 网络协议栈一 全景图
查看>>
慢慢欣赏linux 网络协议栈二 net_device以及初始化注册
查看>>
慢慢欣赏linux 网络协议栈三 监听链路状态
查看>>
慢慢欣赏linux 网络协议栈四 sk_buff以及数据收发
查看>>
慢慢欣赏linux 内核定位手段printk
查看>>
慢慢欣赏linux 网络协议栈七 虚拟网卡
查看>>
linux设备驱动模型代码分析
查看>>
uboot入门学习二 位置无关代码以及地址
查看>>
慢慢欣赏linux 块设备驱动基础
查看>>