nodejs生成图片验证码

1. 安装依赖

1
npm i svg-captcha

2. 后端接口

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
const express = require('express')
const router = express.Router()
// 解析以 application/json 和 application/x-www-form-urlencoded 提交的数据
app.use(express.json())
app.use(express.urlencoded({extended:false}))

const svgCaptcha = require('svg-captcha')

const cookieParser = require('cookie-parser')
router.use(cookieParser())
// res.cookie()设置cookie值, req.cookies获取cookie值
// 获取图行验证码
router.get('/captcha', (req, res) => {
const captcha = svgCaptcha.create({
inverse: false, // 翻转颜色
fontSize: 48, // 字体大小
noise: 2, // 干扰线条数
width: req.query.width || 150, // 宽度
height: req.query.height || 50, // 高度
size: 4, // 验证码长度
ignoreChars: '0o1i', // 验证码字符中排除 0o1i
color: true, // 验证码是否有彩色
background: '#cc9966', // 验证码图片背景颜色
})
//保存到cookie,忽略大小写
res.cookie('captcha', captcha.text.toLowerCase())
res.type('svg')
res.send(captcha.data)
})

// 登录校验验证码
router.post('/login', (req, res) => {
const { account, password, captcha } = req.body
if (captcha.toLowerCase() !== req.cookies.captcha) {
res.send({ success: false, code: 0, msg: '验证码输入错误', data: null })
return
}
})

3. 前端页面

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<template>
<div>
< img :src="captchaUrl" alt="" />
</div>
</template>
<script>
export default {
data() {
return {
captchaUrl: '',
}
},
mounted() {
this.captchaUrl = `https://×××.××××.cn/pc/captcha?width=100&height=40&t=${new Date().getTime()}`
},
}
</script>