最近由于项目的需要,做了一个node ccap验证码模块的实战,期间也遇到了很多问题,但通过自己的努力和不断的探索,最终都一一解决了。
验证码实现逻辑思路:前端获取验证码的时候,向后台传递一个key(一般通用Unix时间点到毫秒,注意避免重复,当然也可以自定义key),后台生成验证码的时候,并记录该key值和对应的验证码(缓存或数据库记录都可以,一般用缓存即可,避免数据库IO操作),当前端向后台请求需要走验证码逻辑的接口时,带上该key值和对应的验证码,后台通过比对即可判断出是否验证成功。(key也可以是后台生成,前端通过获取验证码接口获取key)
具体实战分享如下,希望可以帮助到有需要的人。(注意:本实战源码是结合node koa2.)
参考网站:https://www.npmjs.com/package/ccap
https://www.npmjs.com/package/node-gyp
前期准备,插件需求:
这个库依赖python2.7.X和node-gyp,请先安装 npm install --global --production windows-build-tools (以管理员身份安装) npm install cnpm -g --registry=https://registry.npm.taobao.org cnpm install node-gyp -g cnpm install ccap
核心代码分享如下:
var ccap = require('ccap'); getVerifyCode: async (ctx, next) => { var random_key = Date.now();//用时间点做唯一标识 var captcha = ccap({ width:256,//set width,default is 256 height:60,//set height,default is 60 offset:0,//set text spacing,default is 40 quality:100,//set pic quality,default is 50 fontsize:50,//set font size,default is 57 // generate:function(){//Custom the function to generate captcha text // //generate captcha text here // return text;//return the captcha text // } }); var arr = captcha.get(); ctx.body = common.json({verifyCodeImage: arr[1], key: random_key}); },