首页 > 编程语言 >Vue + node简单实现验证码

Vue + node简单实现验证码

时间:2023-03-25 11:35:13浏览次数:40  
标签:node Vue const uuid res 前端 验证码 codeArr

web实现验证码思路

(个人简单示例操作,流程可能并不规范,仅提供演示,请勿抬杠)

验证码代码流程

  1. 前端发送get请求来获取验证码图片。
    后端收到前端的生成验证码请求,生成验证码图片和验证码内容。然后将随机生成uuid值作为键,验证码内容作为值,形成一对键值对,存储在Redis中(这里存入对象)。同时根据需求设置验证码的有效期,之后把uuid的值作为cookie传回前端;
const svgCaptcha = require('svg-captcha');
const { v4: uuidv4 } = require('uuid');
const globals = require('./globals');
// 获取图形验证码
exports.getImageCode = function (req, res) {
    const captcha = svgCaptcha.create({
        inverse: false, // 翻转颜色
        fontSize: 48, // 字体大小
        noise: 2, // 干扰线条数
        width: req.query.width || 115, // 宽度
        height: req.query.height || 40, // 高度
        size: 4, // 验证码长度
        ignoreChars: '0o1i', // 验证码字符中排除 0o1i
        color: true, // 验证码是否有彩色
        background: '#cc9966', // 验证码图片背景颜色
    })
    let uuid = uuidv4();
    globals.set(uuid, captcha.text.toLowerCase());
    //保存到cookie,忽略大小写
    res.cookie('uuid', uuid)
    res.type('svg')
    res.send(captcha.data)
}
// globals.js
// 存储uuid和验证码
const codeArr = {}
// const tokenArr=[] 不考虑好了
// 获取验证码是否存在
exports.get = function (uuid) {
  return codeArr.hasOwnProperty(uuid) ? codeArr[uuid] : false;
};

// 存储验证码并设置有效期
exports.set = function (uuid, code, lifespan = 30) {
  codeArr[uuid] = code;
  // 有效期30s
  setTimeout(() => {
    Reflect.deleteProperty(codeArr, uuid);
  }, lifespan * 1000)
  return true;
};
  1. 前端获取到验证码,等待用户输入验证码之后进行提交请求。
  2. 后端同cookie拿到uuid以及用户输入的验证码内容。根据uuid取出Redis中保存的值,如果值为空,那么说明验证码已经过期;如果值不为空,取出值和前端传过来的用户输入的验证码内容进行比较,如果相等,那么就验证码输入正确,否则验证码输入错误,将结果返回给前端。
  3. 前端收到后的响应,如果验证码正确,则显示提交成功,否则重新请求后端生成验证码,然后重复上述步骤。

箴言:因为这些东西是非常简单的。不要抱怨自己学不会,那是因为你没有足够用心。



标签:node,Vue,const,uuid,res,前端,验证码,codeArr
From: https://blog.51cto.com/echohye/6148992

相关文章

  • 搞一个自己用的node-cli
    我们都用过vue的cli,或者react的cli, 亦或是其他的cli如vite等。他们都是提供了一个全局命令,然后在终端执行这个全局命令就可以创建出模板项目。今天我们就自己做......
  • vue-element-admin 运行踩坑笔记
     [email protected]:ThisSVGOversionisnolongersupported.Upgradetov2.x.x.npmERR!Errorwhileexecuting:npmERR!G:\ForCodeSoftw......
  • vue实现移动端签名功能之 vue-esign插件篇
    1.安装vue-esignnpminstallvue-esign--save2.全局引用  3.代码  4.将生成的base64转成文件  handleGenerate(){   this.$refs.esign  ......
  • vue03 01.创建项目
    目录01.创建项目打包工具vite介绍安装命令启动项目浏览效果代码目录打包预览运行01.创建项目打包工具vite官网vite介绍Vite也是前端构建工具相较于webpack,vite采......
  • vue2 - mockjs的使用
    mockjs官网:http://mockjs.com/ 1.安装mockjsnpminstallmockjs 2.创建mock文件夹并且创建index.js//引入mockjsimportMockfrom"mockjs"//引入数据import......
  • 修改AJAX内容后,每次都需要重新运行终端?解决方法(nodemon)
    安装  npminstall-gnodemon 使用nodemon.\server.js 备注:.\server.js是服务器(自己写的)  ......
  • 商城网站毕业设计( Python +Vue)
    网站介绍基于python开发的电子商城网站,平台采用B/S结构,后端采用主流的Python语言进行开发,前端采用主流的Vue.js进行开发。这是给师弟开发的毕业设计。整个平台包......
  • centos7 yum 安装nodejs 16,搭建编译vue项目环境
    1、安装nodejscurl-fsSLhttps://rpm.nodesource.com/setup_16.x|sudobash-sudoyuminstallnodejsnode-v2、安装yarn#安装yarnnpminstall-gyarn#查......
  • vue2中添加全局样式
    在assets文件夹中创建一个css文件,放入想要的全局样式.好了之后找到main文件然后再main.js文件中import'./assets/golbal.css'即可......
  • 基于vue框架axios网络请求封装
    原因axios是网络请求的第三库,为了防止降低对第三库的依赖性,所以将axios请求封装为函数,方便后期代码的维护安装npminstallaxios封装在目录结构src文件夹下创建n......