node.js + express+ svg-captcha 实现获取验证码

凌志学
2023-12-01

在做用户登录的时候需要使用验证码,于是找度娘了解了一下,这里使用nodejs+express+svg-captcha 实现验证码
1.安装svg-captcha依赖,.后续过程需要使用到session,所以要安装express-session依赖,session的认证机制必须依赖cookie,所以还应该同时安装一个cookie-parser
 

//node 必须安装的依赖
npm install --save svg-captcha
npm install --save cookie-parser
npm install --save express-session

2之后定义cookie解析器,注意,该定义必须写在路由分配之前:

const express = require("express");
var session = require('express-session');
var cookieParser = require('cookie-parser');

const bodyParser = require("body-parser");
const app = new express();
app.use(cookieParser());
app.use(session({
    secret: 'secret', // 对session id 相关的cookie 进行签名
    resave: true,
    saveUninitialized: false, // 是否保存未初始化的会话
    cookie: {
        maxAge: 1000 * 60 * 3, // 设置 session 的有效时间,单位毫秒
    },
}));
app.use(bodyParser.json({ limit: '50mb' }));
app.use(bodyParser.urlencoded({ limit: '50mb', extended: true }));

3.验证码获取接口,将验证码存储在session中,并将生成验证码后返回给前端

app.post('/admin/captcha', function (req, res) {
    var captcha = svgCaptcha.create({
        size: 4,  //验证码长度
        width: 100, //svg宽度
        height: 50, //svg高度
        // background: "#eee",//svg背景色
        noise: 2, //干扰线条数
        fontSize: 35, //字体大小
        ignoreChars: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxz',   //验证码字符中排除
        color: false // 验证码的字符是否有颜色,默认没有,如果设定了背景,则默认有           
    });
    req.session.captcha = captcha.text;
    res.type('svg');
    res.status(200).send({
        code: 200,
        result: captcha.data
    });
});

到这一步已经能够在前台显示验证码了,要登录验证的时候只需把表单的值传给后端验证就行啦,上面的获取验证码接口已经将验证码存在session里面了,只需要从req,session.captcha获取就可以了,此时验证码区分大小写.。

通过接口返回的是一个SVG格式的图片地址。

 类似资料: