前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Node实现图形验证码

Node实现图形验证码

作者头像
Ewall
发布于 2020-11-12 03:02:36
发布于 2020-11-12 03:02:36
1.6K00
代码可运行
举报
文章被收录于专栏:vue学习vue学习
运行总次数:0
代码可运行

使用 svg-captcha 这个包并结合后端实现图形验证码功能。 项目地址:https://github.com/Ewall1106/mall

基本使用

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ npm install svg-captcha --save
  • 官方文档中的基本使用示例:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const svgCaptcha = require('svg-captcha');

const captcha = svgCaptcha.create();
console.log(captcha);
  • 我们还可以进行一些简单的选项配置。
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// svgCaptcha.create(<OPTIONS>)
// eg:
svgCaptcha.create({
  size: 4, // 个数
  width: 100, // 宽
  height: 30, // 高
  fontSize: 38, // 字体大小
  color: true, // 字体颜色是否多变
  noise: 1, // 干扰线几条
  background: 'red', // 背景色
});

前端实现

  • 前端要做的工作很简单,获取后端的接口,后端返回一个 svg 的图片数据,将其显示在页面上即可。
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// 显示获取的验证码
<div v-html="captchaSvg" />

// 获取图形验证码
getCaptcha() {
  getCaptcha().then((res) => {
    this.captchaSvg = res.entry
  })
}
  • 然后我们需要一个唯一的标识,将其与验证码一一对应上,不然,后端怎么知道这个验证码是谁发送的呢?
  • 所以我们使用uuid这个库来生成一个唯一的标识并发送给后端。
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 安装uuid
$ npm install uuid
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// 发送给后端
import { v4 as uuidv4 } from 'uuid';

let sid = uuidv4(); // ⇨ '9b1deb4d-3b7d-4bad-9bdd-2b0d7b3dcb6d'

getCaptcha() {
  getCaptcha({ sid }).then((res) => {
    this.captchaSvg = res.entry
  })
}
  • 具体前端实现的代码地址:-->代码

后端实现

接收并缓存

  • 当后端接收到前端发过来的请求时,首先使用 svg-captcha 提供的能力生成一个 svg 图片给前端。
  • 然后我们需要将前端传过来的 sid标识 作为 key验证码 作为 value 值保存起来,以便我们后面登录的时候对其正确性做验证。
  • 我这里的 setValue 方法是将图形码 key-value 保存在了 redis 缓存中,你也可以用其它方式将其保存下来。
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
async getCaptcha(ctx) {
  const captcha = svgCaptcha.create({
    width: 100,
    height: 30,
    fontSize: 38,
    color: false,
  });

  // 缓存key-value 并设置缓存有效期为10分钟
  setValue(sid, captcha.text, 10 * 60);

  ctx.body = {
    code: 200,
    entry: captcha.data,
  };
}

验证图形码

  • 当我们在调起登录接口的时候,我们将表单中输入的验证码与缓存中的验证码进行验证。
  • 完整后端实现代码:-->地址
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
async login(ctx, next) {
  const { username, password, captcha, sid } = ctx.request.body;
  // 通过唯一标识符sid来获取缓存中图形验证码
  const value = await getValue(sid);
  if (!value) {
    ctx.body = {
      code: 400,
      message: '图形验证码已过期,请点击图片刷新',
    };
    return;
  }
  if (captcha.toLowerCase() !== value.toLowerCase()) {
    ctx.body = {
      code: 400,
      message: '请输入正确的验证码',
    };
    return;
  }
}
  • 至此,图形验证码功能基本完成。
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
2025最新滑块验证码、图形验证码、解决滑块验证码识别的技术方法大全
滑块验证码(Slider Captcha)自上线以来,以其交互性强、用户体验较好而被广泛应用于各类网站和 APP 的登录、注册、支付等关键环节。相比传统文字验证码或图形混淆验证码,滑块验证码能够更有效地区分真人与机器人,降低恶意脚本的通过率。然而,随着技术的发展,滑块验证码也不断被识别与破解。本文将从「生成与验证组件」和「识别与破解工具」两个大类入手,结合多款 GitHub 开源项目,逐一介绍各自的技术栈、实现原理、优缺点,以及实际使用场景与配置要点,并在最后给出综合对比与推荐,帮助技术选型和快速上手。
猫头虎
2025/06/08
6490
nodejs使用redis实现图形验证码功能
简单的写了一下node如果使用redis以及如何生成图形验证码。主要目的是为了在设计登陆注册的时候有图形验证码可以简单防止频繁的刷登陆注册接口。将验证码存于redis中主要是因为redis是一个key-value类型的缓存。用完即删除,十分适用于这样的临时存值的需求
w候人兮猗
2020/06/24
1.1K0
Koa结合Svg-captcha实现用户验证码登录
在开发用户登录系统时,经常要用验证码验证登录是否为人为的操作,以防止有人用密码字典暴力破解,svg-captcha这个模块就是专门用来干这个的,下面给大家介绍一下它的使用方法。
越陌度阡
2020/11/26
1.2K0
记一个node实现的图形验证码从0到1
记一个node实现的图形验证码从0到1 最近做了一个项目,需要用到给用户发送短信验证码,短信必然走的是第三方的服务。。 so 每一条都是收费的,所以在短信验证码之前,我们需
贾顺名
2018/04/12
9830
记一个node实现的图形验证码从0到1
Nest.js 实战 (七):如何生成 SVG 图形验证码
在客户端登录的时候,我们就能根据传过来的验证码与 Session 中的信息判断是否正确:
白雾茫茫丶
2024/08/06
3660
Nest.js 实战 (七):如何生成 SVG 图形验证码
浅谈 前端验证码那些事
在实际项目的开发中,验证码的出现的频率相当高,它能实现人机甄别访问、减轻服务器负担的作用。常见的验证码为以下几类:
万少
2025/02/10
1890
浅谈 前端验证码那些事
nodejs实现图形验证码
nodejs生成图形验证码可以自己写一个,我感觉比较麻烦,因为有现成的……下面我来介绍一下这个现成的验证码生成模块:svg-captcha
OECOM
2020/07/02
3.2K0
Spring Boot 3 整合Hutool-captcha实现图形验证码
在整合技术框架的时候,想找一个图形验证码相关的框架,看到很多验证码不在更新了或者是在中央仓库下载不下来,还需要多引入依赖。后面看到了Hutool 图形验证码(Hutool-captcha)中对验证码的实现,提供了:线段干扰验证码、圆圈干扰验证码、扭曲干扰验证码以及自定义验证码。就此验证码在项目中的使用展开说明。
Harry技术
2025/01/12
5590
Spring Boot 3 整合Hutool-captcha实现图形验证码
SpringBoot3整合Hutool-captcha实现图形验证码
如果你想像Spring-Boot一样引入Hutool,再由子模块决定用到哪些模块,你可以在父模块中加入:
Harry技术
2025/01/13
2400
SpringBoot3整合Hutool-captcha实现图形验证码
Java图形验证码支持gif、中文、算术等
图形验证码是最经典,也是最常用的验证方式。今天介绍一个非常不错的类库:Java图形验证码,支持gif、中文、算术等类型,可用于Java Web、JavaSE等项目。
BUG弄潮儿
2020/10/19
1K0
SpringBoot 前后端分离 实现验证码操作
captcha 一款超简单的验证码生成,还挺好玩的。还有中文验证码,动态验证码. 。在项目中 pom.xml 配置文件中添加依赖,如下:
FHAdmin
2022/05/24
1.8K0
从零玩转腾讯滑块验证码
现在大部分公司的前端都是以滑块验证码进行验证机器人行为,后端也有但差不多都是图形验证码或者手机验证码,直接进入主题接下来我们要玩转的技术 是腾讯云出品的滑块验证码(可以免费领取5W以上的免费次数有效期限一年哦)
杨不易呀
2022/01/19
11.7K7
从零玩转腾讯滑块验证码
登录验证码demo-java
在一些类似于管理系统的项目中,我们在登录时经常会用到图片验证码。这里把我自己写的一个小系统(后台是java语言)的验证码部分摘出来。 总体思路是后端有一个生成验证码图片的接口,把验证码图片写入浏览器,前端页面在img标签里的src属性里填写后端生成验证码图片的接口地址即可。 1、java部分-CaptchaController.java 我这里是把后端生成的验证码生成图片返回给浏览器时,同时存入到了数据库中,前端登录时,后端根据前端输入的验证码和数据库中的验证码作对比,来判断是否可以登录。 package
用户1174387
2018/01/17
3.3K0
登录验证码demo-java
springbooot使用google验证码
由于需要做一个前后端分离的项目,想着使用google验证码,由于年龄大了,这些知识啊,用完就忘,在这里记录一下。
魚迹
2023/05/06
4560
springbooot使用google验证码
原生 JavaScript + NodeJS(Express 框架) 做一个简陋的登录注册项目
配置在 config/default.js ,当然可以在具体文件配置,但是这儿方便一点
Rikka
2022/01/20
9560
【Spring】探秘 SpringBoot 配置文件:解锁验证码背后的实现逻辑
干扰项:圆形干扰,线性干扰,扭曲字体干扰,颜色色块干扰.....其实主要就是验证码号以及背景干扰项;(小编自己总结的)
用户11288949
2025/01/17
810
【Spring】探秘 SpringBoot 配置文件:解锁验证码背后的实现逻辑
Tornado框架实现图形验证码功能
图形验证码是项目开发过程中经常遇到的一个功能,在很多语言中都有对应的不同形式的图形验证码功能的封装,python 中同样也有类似的封装操作,通过绘制生成一个指定的图形数据,让前端HTML页面通过链接获取到对应的图片验证码进行操作。
周小董
2019/03/25
2.9K1
Tornado框架实现图形验证码功能
常用验证码之滑动验证码|图形验证码
这里是常用验证码的第三篇——滑动/图形验证码。在前两篇已经实现了随机验证码和算术验证码,感兴趣的可以去看一下~
流眸
2020/07/06
22.4K1
关于TypeScript实现后端发送给前端验证码图片和后端校验前端验证码
是谁抢了www名字
2024/09/24
1540
使用腾讯云TCB云函数实现生成随机验证码功能
最近在玩云函数,发现官方文档上说了 http 访问服务时可以使用集成响应返回二进制文件。
薛定喵君
2020/11/09
1.9K0
推荐阅读
相关推荐
2025最新滑块验证码、图形验证码、解决滑块验证码识别的技术方法大全
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验