egg实现图形验证码

本文详细介绍了如何在Node.js中使用Egg.js框架实现图片验证码的生成与验证,包括在router.js中注册路由,编写controller和service文件,以及前端与后端的交互。同时,还展示了如何配置svg-captcha和egg-session插件,并提供了前端实时刷新验证码的JavaScript代码。通过这个实例,读者可以了解到验证码系统的实现流程和关键点。
摘要由CSDN通过智能技术生成

在这里插入图片描述

首先在router.js中注册路由

   router.get('/util', controller.util.captcha); //前台显示图片验证码
   router.post('/util', controller.util.verify); //后台比对验证码

然后写对应的controller文件

'use strict';
const Controller = require('egg').Controller;

class UtilController extends Controller {
    async captcha() {
        const ctx = this.ctx;
        let captcha = await ctx.service.captcha.captcha();
        ctx.response.type = 'image/svg+xml'; // 知道你个返回的类型
        ctx.body = captcha.data; // 返回一张图片
        ctx.session.login_code = captcha.text.toLowerCase();
        ctx.session.maxAge = 1000 * 60 * 10;
    }

    async verify() {
        const { type, code } = ctx.query // 获取客户端发送的类型和验证码
        const { login_code, register_code } = ctx.session // 获取session保存的验证码
        let result_success = { status: 0, message: 'success' } // 定义返回结果
        let result_error = { status: 1, message: '验证码错误' }
            // 登陆验证码验证
        if (type === '1') { //进行验证并返回结果
            ctx.body = code === login_code ? result_success : result_error
        } else {
            // 注册验证码验证
            ctx.body = code === register_code ? result_success : result_error
        }
    }
}

module.exports = UtilController;

编写Service文件

   const Service = require('egg').Service;
const svgCaptcha = require('svg-captcha');

class ToolsService extends Service {
    // 产生验证码
    async captcha() {
        const captcha = svgCaptcha.create({
            size: 4,
            fontSize: 40,
            width: 100,
            ignoreChars: 'OoLi',
            height: 40,
            noise: 4,
            background: '#cc9966'
        });
        this.ctx.session.code = captcha.text;
        return captcha;
    }
}

module.exports = ToolsService;

配置相应的插件

可以使用以下的npm install svg-captcha --save ; npm install egg-session --save就可以安装插件

   module.exports.captcha = {
    enable: true,
    package: 'svg-captcha',
};//添加svg插件并开启插件

module.exports.session = {
    enable: true,
    package: 'egg-session',
};//使用session

前端点击图片实时刷新图片验证码

下面的js中在路由后面生成随机的字符串是为了清除浏览器缓存,可以刷新出新的验证码图片,"?"的作用就是加上一个参数,也就是随机字符串

   <div>
   <img src="/captcha" alt="验证码图片" onclick="this.src = this.src + '?' +Math.random()">
   </div>

最后要强调的就是在前端使用img标签接收验证码,就是上面的html文件。

将验证码存入session中,在后台判断(session安全)。不懂的可以看这里

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

githubcurry

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值