使用 svg-captcha 插件在 ThinkJS 中实现随机验证码功能
效果预览
安装 svg-captcha
1 | npm install --save svg-captcha |
API
svgCaptcha.create(options)
如果没有任何参数,则生成的 svg 图片有 4 个字符。
size
: 4 // 验证码长度ignoreChars
: ‘0o1i’ // 验证码字符中排除 0o1inoise
: 1 // 干扰线条的数量color
: true // 验证码的字符是否有颜色,默认没有,如果设定了背景,则默认有background
: ‘#cc9966’ // 验证码图片背景颜色
该函数返回的对象拥有以下属性:data
: string // svg 路径text
: string // 验证码文字
svgCaptcha.createMathExpr(options)
和前面的 api 的参数和返回值都一样。不同的是这个 api 生成的 svg 是一个算数式,而 text 属性上是算数式的结果。不过用法和之前是完全一样的。
svgCaptcha.loadFont(url)
加载字体,覆盖内置的字体。
url
: string // 字体文件存放路径 该接口会调用 opentype.js 同名的接口。 你可能需要更改一些配置才能让你得字体好看。
详见下面的这个接口:
svgCaptcha.options
这是全局配置对象。 create 和 createMathExpr 接口的默认配置就是使用的这个对象。
除了 size, noise, color, 和 background 之外,你还可以修改以下属性:
width
: number // width of captchaheight
: number // height of captchafontSize
: number // captcha text sizecharPreset
: string // random character preset
svgCaptcha.randomText([size|options])
返回随机字符串
svgCaptcha(text, options)
返回基于 text 参数生成得 svg 路径
在 1.1.0 版本之前你需要调用上面的两个接口,但是现在只需要调用 create()
在 ThinkJS 中的实践
简单代码
1 | const Base = require('../base.js') |
代码解析
首先我们需要导入模块:
1 | const svgCaptcha = require('svg-captcha') |
创建方法
1 | codeAction() { |
在这里,我选择的是生成一个算数式的验证码,然后将得到的 captcha.text
即算术式的结果,存入到 session
中。
当前端提交表单的时候,我们将表单中提交过来的结果与后端的结果进行比对是否一致:
1 | if (this.session.captcha === reward.code) { |
这样一个简单的随机验证码的功能就实现完成了。