LazySlideCaptcha是基于.Net Standard 2.1的滑动验证码模块。
项目同时提供一个基于vue2的演示前端组件和背景图裁剪工具。
图形验证码请移步lazy-captcha。
在线体验
快速开始- 安装
- Package Manager
Install-Package Lazy.SlideCaptcha.Core
- .NET CLI
dotnet add package Lazy.SlideCaptcha.Core
- 注册并配置服务
builder.Services.AddSlideCaptcha(builder.Configuration);
// 如果使用redis分布式缓存
//builder.Services.AddStackExchangeRedisCache(options =>
//{
// options.Configuration = builder.Configuration.GetConnectionString("RedisCache");
// options.InstanceName = "captcha:";
//});
"CaptchaSlideOptions": {
"Backgrounds": [
{
"Type": "file",
"Data": "wwwroot/images/background/1.jpg"
},
{
"Type": "file",
"Data": "wwwroot/images/background/2.jpg"
}
]
}
背景图片要求尺寸要求为 552 X 344 , 快速开始可在 Demo 项目 wwwroot/images/background 下挑选。(仅用作演示,生产请自行制作。)也可以通过裁剪工具制作,非常简单,上传图片,拖动范围后保存自动生成 552 X 344 图片。
- 接口定义
[Route("api/[controller]")]
[ApiController]
public class CaptchaController : ControllerBase
{
private readonly ICaptcha _captcha;
public CaptchaController(ICaptcha captcha)
{
_captcha = captcha;
}
/// <summary>
/// id
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
[Route("gen")]
[HttpGet]
public CaptchaData Generate()
{
return _captcha.Generate();
}
/// <summary>
/// id
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
[Route("check")]
[HttpPost]
public bool Validate([FromQuery]string id, SlideTrack track)
{
return _captcha.Validate(id, track);
}
}
至此后端Api服务已搭建完成。
- 前端
前端提供演示组件lazy-slide-captcha,可通过npm安装。Demo项目为了演示方便直接采用script直接引入方式。
@{
ViewData["Title"] = "滑动验证码";
}
<link rel="stylesheet" href="~/lib/lazy-slide-captcha/dist/lazy-slide-captcha.css" asp-append-version="true" />
<style>
#app {
display: flex;
align-items: center;
justify-content: center;
}
.panel {
padding: 20px;
box-shadow: inherit;
border-radius: 6px;
box-shadow: 0 0 4px 0 #999999;
margin-top: 100px;
}
</style>
<div id="app">
<div class="panel">
<lazy-slide-captcha ref="captcha" :width="width" :height="height" :show-refresh="true" :fail-tip="failTip" :success-tip="successTip" @@finish="handleFinish" @@refresh="generate"></lazy-slide-captcha>
</div>
</div>
@section Scripts{
<script src="~/lib/vue/vue.min.js"></script>
<script src="~/lib/vue/axios.min.js"></script>
<script src="~/lib/lazy-slide-captcha/dist/lazy-slide-captcha.umd.js"></script>
<script>
var app = new Vue({
el: '#app',
data(){
return {
requestId: undefined,
failTip: '',
successTip: '',
// width,height保持与552 * 344同比例即可
width: 340,
height: 212
}
},
mounted(){
this.generate()
},
methods:{
generate(){
// 改变内部状态,标识生成请求开始
this.$refs.captcha.startRequestGenerate()
axios.get('/api/captcha/gen')
.then((response) => {
this.requestId = response.data.id
// 改变内部状态,标识生成请求结束,同时设定background,slider图像
this.$refs.captcha.endRequestGenerate(response.data.backgroundImage, response.data.sliderImage)
})
.catch((error) => {
console.log(error);
// 标识生成请求结束
this.$refs.captcha.endRequestGenerate(null, null)
});
},
handleFinish(data){
// 改变内部状态,标识验证请求开始
this.$refs.captcha.startRequestVerify()
axios.post(`/api/captcha/check?id=${this.requestId}`, data)
.then((response) => {
let success = response.data.result === 0
// 验证失败时显示信息
this.failTip = response.data.result == 1 ? '验证未通过,拖动滑块将悬浮图像正确合并' : '验证超时, 请重新操作'
// 验证通过时显示信息
this.successTip = '验证通过,超过80%用户'
// 改变内部状态,标识验证请求结束,同时设定是否成功状态
this.$refs.captcha.endRequestVerify(success)
if(!success){
setTimeout(() => {
this.generate()
}, 1000)
}
})
.catch((error) => {
console.log(error);
this.failTip = '服务异常,请稍后重试'
// 标识验证请求结束
this.$refs.captcha.endRequestVerify(false)
});
}
}
});
</script>
}
配置说明
支持配置文件和代码配置,同时配置则代码配置覆盖配置文件。
- 配置文件
"CaptchaSlideOptions": {
"ExpirySeconds": 60, // 缓存过期时长
"StoreageKeyPrefix": "", // 缓存前缀
"Tolerant": 0.02, // 容错值(校验时用,缺口位置与实际滑动位置匹配容错范围)
"Backgrounds": [ // 背景图配置
{
"Type": "file",
"Data": "wwwroot/images/background/1.jpg"
}
],
// Templates不配置,则使用默认模板
"Templates": [
{
"Slider": {
"Type": "file",
"Data": "wwwroot/images/template/1/slider.png"
},
"Hole": {
"Type": "file",
"Data": "wwwroot/images/template/1/hole.png"
}
}
]
}
- 代码配置
builder.Services.AddSlideCaptcha(builder.Configuration, options =>
{
options.Tolerant = 0.02f;
options.StoreageKeyPrefix = "slider-captcha";
options.Backgrounds.Add(new Resource(FileResourceHandler.TYPE, @"wwwroot/images/background/1.jpg"));
options.Templates.Add
(
TemplatePair.Create
(
new Resource(FileResourceHandler.TYPE, @"wwwroot/images/template/1/slider.png"),
new Resource(FileResourceHandler.TYPE, @"wwwroot/images/template/1/hole.png")
)
);
});
扩展
- Template自定义
Template 是指用于生成凹槽和拖块的图片,可通过Templates配置节点设置设置自定义Template。 默认五个 Template (不要配置,已经包含在类库内部)如下:
slider | hole | slider | hole |
栏目热文手机登录网站不能滑动验证(手机登录网页版 怎么向左滑动验证)近期平台上线了对四人赛随机进行账号滑动验证的规则。对于净化学习环境、打击外挂、整治学习秩序、打击投机取巧的人来说,确实是... 2023-11-22 21:58:07查看全文 >> 手机网页验证怎么滑动(手机网页滑块验证拖动不了怎么办)你知道吗,每年都要进行养老金认证,才能保证养老金的正常发放。但是,有些人可能因为年纪大、身体不便、住在农村等原因,不方便... 2023-11-22 22:20:33查看全文 >> 手机登录网站不能滑动验证怎么办(登录网站不能滑动验证怎么办)导读:滑块验证是一种极验类型,用于用户登录时人机识别。该方式相比较于图形验证码、滑动拼图验证、点选验证等验证方式,操作成... 2023-11-22 22:18:50查看全文 >> 鹌鹑蛋的皮为什么有白有黑(鹌鹑蛋为什么有透明的也有白色的)引导语话说:“要吃飞禽,鸽子鹌鹑。”鹌鹑肉、蛋,味道鲜美,营养丰富。鹌鹑蛋是一种很好的滋补品,在营养上有独特之处,故有 ... 2023-11-22 22:32:23查看全文 >> 鹌鹑蛋如何看新鲜还是不新鲜(鹌鹑蛋新鲜不新鲜怎么判断)如何挑选鹌鹑蛋新鲜鹌鹑蛋的外壳颜色呈灰白色,分布着大小不一的褐色斑块,并且富有光泽感。仔细观察表面,上面有些细小的孔。如... 2023-11-22 22:12:25查看全文 >> 网站滑动验证滑不了怎么办(网页验证码无法滑动)IT之家 7 月 28 日消息,网友 NIVEA_GeForce 近日在 Reddit 社区发帖,表示 Microsof... 2023-11-22 22:05:38查看全文 >> 手机网页认证滑动不了(手机网页登录验证滑块显示不完整)大家好,我是公众号3分钟学堂的郭立员~这是一篇分析类型的文章,主要讲关于滑块滑动的问题,大家应该遇到过这么一种情况,用脚... 2023-11-22 22:22:17查看全文 >> 手机网页中滑动验证怎么操作(手机网页滑动验证整个屏都跟着动)前言图形验证码是一种很常见的行为验证码,其中滑动拼图,用户只需要轻轻滑动滑块填充拼图,即可完成安全验证。通常包括嵌入式、... 2023-11-22 22:07:42查看全文 >> 手机登录网页需要滑动验证(手机网页中滑动验证怎么操作)编辑导语:在很多时候我们都会遇到登录的情景,不同的产品也会使用不同的登录验证方式,比如常见的短信验证、拖动滑块验证等等,... 2023-11-22 22:09:54查看全文 >> 网页上的滑动验证码很难滑(浏览器不能滑动验证码)滑动验证码曾风靡一时,出现在各个应用场景中,最普及的应用场景也就是手机滑动解锁了。其实不管是滑动验证码,还是图形验证码,... 2023-11-22 22:04:44查看全文 >> 文档排行 |