express+svg-captcha(在vue中)验证码实现及验证(附前后端代码)

安装:

1.svg-captcha插件 (验证码生成的插件)

npm install --save svg-captcha

2.express-session中间件 (svg-captcha依赖session存储验证码信息)

npm install express-session 

3.cookie-parser (session的认证机制依赖cookie)

npm install cookie-parser
后端配置:

在入口文件(以app.js为例)中定义cookie解析器,位置写在路由分配前

var session = require('express-session');
var cookieParser = require('cookie-parser');

app.use(cookieParser());
app.use(session({
    secret: 'lce', // 对session id 相关的cookie进行签名
    resave: true,  //是指每次请求是否都重新设置session cookie
    saveUninitialized: false, // 是否保存未初始化的会话
    cookie: {
        maxAge: 1000 * 60 * 3, // 设置 session 的有效时间,单位毫秒
    },
    rolling: true,//是否回滚
    name: "session",//key名,默认为connect.id
}));

在应用文件中,引入svg-captcha并配置

const express = require('express');
const svgCaptcha = require('svg-captcha');
const router = express.Router();
router.get('/get-svg', (req, res) => {
  const cap = svgCaptcha.create({
          // 翻转颜色
          inverse: false,
          // 字体大小
          fontSize: 36,
          // 噪声线条数
          noise: 3,
          // 宽度
          width: 80,
          // 高度
          height: 30,
      });
  req.session.captcha = cap.text; // session 存储验证码数值
  res.type('svg'); // 响应的类型
    res.send({
    code: 200,
    data: cap.data, 
  }) 
})
 
module.exports = router;

后端搭建完毕,测试输出,收到svg格式验证码,配置vue前台。

前端配置:
 <el-input
          placeholder="请输入验证码" 
          type="text" v-model="tform.inputma" >
          
          <i slot="suffix">
            <span v-html="src"  @click="getma"
        ref="captcha">  </span>
            </i>
        </el-input>

 在这需要注意的是,从后台获取到的svg是一串html格式的字符串,所以使用span标签,绑定为v-html的内容。

同时要设置点击事件,每次点击时进行验证码的刷新,为了区别每次刷新请求,在这里使用了时间戳格式。

 data() {
    return {    
        src:'',
        text:'',
    };
  },

async getma() {
      let {data}=await this.$axios.get("/get-svg'")
      console.log(data);
      this.src=data.data
      this.text=data.text
      this.$refs.captcha.src = data.data + Date.now();
    },

将获取到的信息封装为对象,发送到后端进行验证

后台验证

(数据库为mongodb)

router.post('/login', (req, res) {
  const name = req.body.name   //前台提交的用户名
  const pwd = md5(req.body.pwd) //md5格式密码
  const captcha = req.body.captcha.toLowerCase()  //验证码,转小写

  // 对用户名/密码格式进行检查, 如果非法, 返回提示信息
  if(captcha!==req.session.captcha) {
    return res.send({code: 1, msg: '验证码不正确'})
  }
  // 验证通过,删除保存的验证码
  delete req.session.captcha

  UserModel.findOne({name}, function (err, user) {
    if (user) {
      console.log('findUser', user)
      if (user.pwd !== pwd) {
        res.send({code: 1, msg: '用户名或密码不正确!'})
      } else {
        req.session.userid = user._id
        res.send({code: 200, data: {_id: user._id, name: user.name, phone: user.phone}})
      }
    } else {
      const userModel = new UserModel({name, pwd})
      userModel.save(function (err, user) {
        // 向浏览器端返回cookie(key=value)
        // res.cookie('userid', user._id, {maxAge: 1000*60*60*24*7})
        req.session.userid = user._id
        const data = {_id: user._id, name: user.name}
        // 3.2. 返回数据(新的user)
        res.send({code: 200, data})
      })
    }
  })
})

最后,根据返回信息,进行前台数据处理

  • 17
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在 Koa2 使用 svg-captcha 生成验证码可以按照以下步骤进行: 1. 安装 svg-captcha 和 koa-svgrouter 模块 ```bash npm install svg-captcha koa-svgrouter --save ``` 2. 在 Koa2 应用引入相关模块 ```javascript const Koa = require('koa'); const Router = require('koa-router'); const svgrouter = require('koa-svgrouter'); const svgCaptcha = require('svg-captcha'); const app = new Koa(); const router = new Router(); ``` 3. 设置路由,生成验证码 ```javascript router.get('/captcha', async (ctx, next) => { const captcha = svgCaptcha.create(); ctx.session.captcha = captcha.text; ctx.type = 'svg'; ctx.body = captcha.data; }); ``` 4. 添加 SVG 路由 ```javascript app.use(svgrouter('/captcha/:id', { useSession: true, sessionName: 'captcha' })); ``` 5. 在需要使用验证码的地方,可以通过如下代码获取验证码图片 ```html <img src="/captcha/1" /> ``` 注意,上述代码的数字 1 是路由参数,可以自行设置。 6. 验证验证码 在需要验证验证码的地方,可以通过如下代码获取用户输入的验证码,并与之前生成的验证码进行比较。 ```javascript const userCaptcha = ctx.request.body.captcha; if (userCaptcha.toLowerCase() === ctx.session.captcha.toLowerCase()) { // 验证码输入正确 } else { // 验证码输入错误 } ``` 以上就是使用 svg-captcha 生成验证码的基本步骤。需要注意的是,在生成验证码验证验证码时都需要使用到 Koa2 的 session 功能,因此需要在应用添加相关间件。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值