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分享。

最后

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

使用.Net Core实现的一个图形验证码的更多相关文章

  1. 程序员不装x能行?先给登录来一个图形验证码!(canvas实现)

    细心的同学可以发现,现在很多网站当登录多次之后就会出现一个图形验证码,或是当提交表单.或点击获取手机验证码等等场景都会有图形验证码的出现. 那么图形验证码是为了解决什么问题而出现的呢? 什么是图形验证 ...

  2. ASP.NET中如何生成图形验证码

    通常生成一个图形验证码主要 有3个步骤: (1)随机产生一个长度为N的随机字符串,N的值可由开发可由开发人员自行设置.该字符串可以包含数字.字母等. (2)将随机生成的字符串创建成图片,并显示. (3 ...

  3. Tornado框架实现图形验证码功能

    图形验证码是项目开发过程中经常遇到的一个功能,在很多语言中都有对应的不同形式的图形验证码功能的封装,python 中同样也有类似的封装操作,通过绘制生成一个指定的图形数据,让前端HTML页面通过链接获 ...

  4. 笔记——Springboot response、ServletOutputStream、图形验证码显示慢

    今天遇到一个图形验证码加载很慢的问题,大概耗时有200~500毫秒左右. 根据追踪,图形验证码图片生成耗时0~1毫秒,而response.getOutputStream.write()将图片写入前台页 ...

  5. 前端登录jq图形验证码

    <!DOCTYPE html><html lang="zh"><head> <meta charset="UTF-8" ...

  6. 【web 安全测试思路】图形验证码对服务器的影响

    前言 图片验证码是为了防止恶意破解密码.刷票.论坛灌水等才出现的,但是你有没有想过,你的图形验证码竟然可能导致服务器的崩溃? 利用过程 这里以phpcms为例,首先需要找一个图形验证码. 将图片拖动到 ...

  7. jmeter 获取图形验证码接口测试

    今天开发提测了一个图形验证码的接口,以前没有测过这个,上来有点懵..... 记录一下. 使用jmeter配置好接口和参数,运行后查看结果树,显示都是乱码 解决方法: 添加一个后置处理器--beansh ...

  8. SpringSceurity(3)---图形验证码功能实现

    SpringSceurity(3)---图形验证码功能实现 有关springSceurity之前有写过两篇文章: 1.SpringSecurity(1)---认证+授权代码实现 2.SpringSec ...

  9. 【java+selenium3】自动化cookie操作+图形验证码处理 (十五)

    一.cookie操作 1.获取浏览器所有的cookie import java.util.Set; import org.openqa.selenium.Cookie; //获取浏览器所有的cooki ...

随机推荐

  1. Java实现 LeetCode 13 罗马数字转整数

    13. 罗马数字转整数 罗马数字包含以下七种字符: I, V, X, L,C,D 和 M. 字符 数值 I 1 V 5 X 10 L 50 C 100 D 500 M 1000 例如, 罗马数字 2 ...

  2. java实现 洛谷 P1018 乘积最大

    import java.math.BigInteger; import java.util.Scanner; public class Main { private static Scanner ci ...

  3. Java实现第九届蓝桥杯全球变暖

    全球变暖 题目描述 你有一张某海域NxN像素的照片,"."表示海洋."#"表示陆地,如下所示: ....... .##.... .##.... ....##. ...

  4. awardRotate转盘插件文字模糊问题和图片加载问题

    前言 最近在做一个转盘抽奖页面,使用了awardRotate.js发现字体和图片都有模糊,绘制的时候图片绘制不全,搜索一下之后发现针对awardRotate的解决方法比较少,针对canvas的比较多, ...

  5. ASP.NET Core通过Nacos SDK读取阿里云ACM

    背景 前段时间,cranelee 在Github上给老黄提了个issues, 问到了如何用Nacos的SDK访问阿里云ACM. https://github.com/catcherwong/nacos ...

  6. xmake v2.3.4 发布, 更加完善的工具链支持

    为了让xmake更好得支持交叉编译,这个版本我重构了整个工具链,使得工具链的切换更加的方便快捷,并且现在用户可以很方便地在xmake.lua中扩展自己的工具链. 关于平台的支持上,我们新增了对*BSD ...

  7. 关于adb命令的基本使用

    在我们使用adb命令之前,我们要安装一个安卓模拟器(夜神.逍遥.海马王......),这里以夜神安卓模拟器为准(个人推荐,没用过可以使用夜神模拟器). 进入夜神安卓模拟器官网:https://www. ...

  8. 在Asp.NET Core中如何优雅的管理用户机密数据

    在Asp.NET Core中如何优雅的管理用户机密数据 背景 回顾 在软件开发过程中,使用配置文件来管理某些对应用程序运行中需要使用的参数是常见的作法.在早期VB/VB.NET时代,经常使用.ini文 ...

  9. mysql where与 having的区别

    where是针对磁盘的数据文件,having是针对存在内存的结果集的筛选. 例如: select name ,(xxx - xxx) as a from table where a > 10; ...

  10. Python多线程 - threading

    目录 1. GIL 2. API 3. 创建子线程 4. 线程同步 4.1. 有了GIL,是否还需要同步? 4.1.1. 死锁 4.1.2. 竞争条件 4.1.3. GIL去哪儿了 4.2. Lock ...