百度了一遍,基本都是千篇一概,都是從 captchapang 扣的,我固然也是。
但前端與後臺的接口基本沒有怎麼實現,wtf前端
後端代碼git
import captchapng from 'captchapng'; class Captchas { constructor() { } //驗證碼 static async getCaptchas(ctx) { const cap = parseInt(Math.random() * 9000 + 1000); const p = new captchapng(80, 30, cap); p.color(0, 0, 0, 0); p.color(80, 80, 80, 255); const base64 = p.getBase64(); //官網少了這一步 ctx.cookies.set('captcha', cap, {maxAge: 360000, httpOnly: true}); ctx.status = 200 ctx.body = { code: 'data:image/png;base64,' + base64 } } } export default Captchas
//官網少了這一步
ctx.cookies.set('captcha', cap, {maxAge: 360000, httpOnly: true});
這樣子你生成的img驗證圖片包含的數字就放在你的cookies了,在提交的時候,從前臺的傳參,跟cookies作個對比github
async Login(ctx) { let cap = ctx.cookies.get('captcha') let {username, password,captcha} = ctx.request.body console.log(cap); console.log(captcha); if (cap!=captcha){ ctx.status = 401; ctx.body = { message: '驗證碼錯誤' } return }