一、应用场景描述
-
用户注册和登录:在用户注册和登录过程中,可以使用验证码来防止恶意机器人或自动化工具进行恶意注册和登录操作。
-
密码重置:在用户请求密码重置时,可以要求用户输入验证码以确保安全性。
-
防止暴力破解:在需要用户频繁尝试的操作(如输入密码错误次数过多)时,可以引入验证码来阻止暴力破解攻击。
-
防止 CSRF 攻击:在 Web 应用程序中,可以使用验证码来防止跨站请求伪造(CSRF)攻击。
二、验证码的类型
-
数字字母混合:使用随机数生成一串数字和字母的组合作为验证码,例如 2kR8sW。
-
纯数字:使用随机数生成一串数字作为验证码,例如 123456。
-
数学公式:生成一个简单的数学公式,例如 1 + 2 = ?,并要求用户输入计算结果作为验证码。
-
图片验证码:生成一张包含随机字符的图片作为验证码,并要求用户输入图片中的字符。
-
语音验证码:生成一段包含随机数字或文字的语音,要求用户听取语音并输入其中的数字或文字作为验证码。
三、svg-captcha 模块
1、svg-captcha 官网
2、svg-captcha 是什么?
svg-captcha 是一个用于生成 SVG 格式验证码图片的 Node.js 模块。它可以帮助你在服务器端生成包含随机字符的验证码图片,并提供给用户进行验证。SVG 格式的验证码图片相比传统的图片格式(如 JPEG 或 PNG)具有伸缩性好、不会失真等优点,同时可以通过 CSS 进行样式定制。
四、使用 svg-captcha 生成验证码图片
说明: 这里需要node.js 的 express框架的基本知识、可以参考
express 的中文官网:Express - 基于 Node.js 平台的 web 应用开发框架 - Express中文文档 | Express中文网
个人博客:关于 express、以及使用 express 搭建,获取验证码接口完整代码实例-优快云博客
1、下载 svg-captcha 包
npm i svg-captcha
2、导入 svg-captcha,并在路由处理函数中使用
// 认证中心路由方法
// 导入 svg-captcha
const svgCaptcha = require('svg-captcha')
// 生成 svg 图片验证码的路由方法
exports.createCaptcha = (req, res) => {
// 生成普通验证码图片
const captcha = svgCaptcha.create({
size: 4, // 验证码长度
noise: 3, // 干扰线数量
fontSize: 50, // 字体大小
width: 150, // 图片宽度
height: 50, // 图片高度
color: true, // 随机颜色
background: '#f5f5f5' // 背景颜色
});
// 生成算数表达式图片
// const captcha = svgCaptcha.createMathExpr({
// size: 6, // 验证码长度
// noise: 0, // 干扰线数量
// mathMin: 1, // 算术表达式中允许的最小数字
// mathMax: 9, // 算术表达式中允许的最大数字
// mathOperator: '+-', // 算术表达式中允许的运算符
// fontSize: 50, // 字体大小
// width: 150, // 图片宽度
// height: 50, // 图片高度
// color: true, // 随机颜色
// background: '#f5f5f5' // 背景颜色
// });
console.log(captcha.text)
// 将验证码文本存储在会话中,以便稍后进行验证
req.session.mathExprCaptcha = captcha.text;
// 浏览器回显演示用
res.send(
captcha.data
)
// 返回客户端数据
// res.send({
// code: 200,
// message: '获取验证码成功!',
// data: captcha.data
// })
}
3、结果
a、普通验证码
b、算数表达式