安装captcha库

使用go get命令获取captcha库

go get github.com/dchest/captcha

构建响应函数

// 发送图片验证码图片(gee7为自搭建web框架,可使用gin框架代替)func Picverfi(db *sql.DB) gee7.HandlerFunc { return func(ctx *gee7.Context) {

  // 生成验证码  id := uuid.New().String() //生成唯一标识符  code := captcha.RandomDigits(4)  img := captcha.NewImage(id, code, captcha.StdWidth, captcha.StdHeight)

  var buf bytes.Buffer  _, err := img.WriteTo(&buf)  if err != nil {   ctx.Returnfunc(401, "出错了,点击重试", nil)  }

  // 转化为base64  encodedImage := base64.StdEncoding.EncodeToString(buf.Bytes())    // 将验证码和图片id存储到数据库中  verificationCode := VerificationCode{PicCode: code, CreatedAt: time.Now().Unix()}  _, err = db.Exec("INSERT INTO verification_codes (id, code, created_at) VALUES (?, ?, ?)", id, verificationCode.PicCode, verificationCode.CreatedAt)  if err != nil {   ctx.Returnfunc(http.StatusInternalServerError, "Internal Server Error:"+err.Error(), nil)   return  }

  // 返回图片与唯一标识符  ctx.Returnfunc(200, "ok", gee7.H{   "picid": id,   "png":   encodedImage,  })

  fmt.Printf("id=%#v\ncode=%d", id, code) }}

gee7为自搭建web框架,可使用gin框架代替

需要了解gee7框架的内容可以访问:

自搭建go web框架

下面对逻辑进行解析

  1. 最核心的的内容是图片验证码的生成与响应
// 生成验证码图片img := captcha.NewImage(id, code, captcha.StdWidth, captcha.StdHeight)//其中id为标识符,code为验证码//读取验证码图片  var buf bytes.Buffer  _, err := img.WriteTo(&buf)  if err != nil {   ctx.Returnfunc(401, "出错了,点击重试", nil)  }

  // 将验证码图片转化为base64格式  encodedImage := base64.StdEncoding.EncodeToString(buf.Bytes())

这时输出encodedImage给前端,前端进行解码就可以看到验证码图片了,

验证码图片的问题解决了,接下来就是验证的逻辑

  1. 验证逻辑

将验证码存入数据库,当用户验证的时候在数据库中查找是否有这一条验证码

但是还需要确定用户上传的验证码是服务器发送的图片中的验证码,所以就需要对验证码进行标识,在用户提交验证的时候通过表示查找验证码,这样就确保验证码的唯一对应性

我们这里使用uuid库生成唯一标识符,这种标识符不重复,避免数据冲突的错误

id := uuid.New().String() //生成唯一标识符

再加上一个验证码过期时间的条件,就完成了基本的验证逻辑

如果需要减少空间浪费,可以在通过验证之后顺手增加一条删除验证码信息的代码,在通过验证之后删除MySQL中对应的数据,减少空间浪费.

验证逻辑:

// 图片验证码验证操作:用户传入图片id(唯一标识符发送图片信息时给的),+验证码func Verifypiccode(db *sql.DB, id string, code []byte) error { var createdAt int64 err := db.QueryRow("SELECT created_at FROM verification_codes WHERE id = ? AND code = ?", id, code).Scan(&createdAt) if err != nil {  return err } // 删除验证码 db.Exec("DELETE FROM verification_codes WHERE id = ?", id) if time.Now().Unix() > createdAt+5*60 { //时效5分钟  return fmt.Errorf("验证码过期") } return nil}

前端vue3组件

<template>  <div>    <button @click="getVerificationImage">获取验证码图片</button>    <div v-if="verificationImage">      <img :src="decodeBase64(verificationImage.png)" alt="验证码图片">    </div>  </div></template>

<script>import axios from 'axios';

export default {  data() {    return {      verificationImage: null,      picid: ''    };  },  methods: {    async getVerificationImage() {    try {      const response = await axios.get('http://localhost:8888/verifypic');      if (response.data.code === 200) {        this.verificationImage = response.data.data;        this.picid = response.data.data.picid;        // 触发自定义事件,将 picid 传递给父组件        this.$emit('verificationImage', this.picid);      } else {        console.error(response.data.msg);      }    } catch (error) {      console.error('获取验证码图片失败', error);    }  },    decodeBase64(base64Data) {      return `data:image/png;base64, ${base64Data}`;    }  }};</script>

本文由 mdnice 多平台发布

使用captcha库实现人机验证的图片验证相关推荐

  1. 【学生管理系统】用户登录三种验证方式—图片验证、短信验证、邮件验证

    目录 一.页面需求展示 二.验证方式-按钮组件 三.手机短信验证 四.邮件验证 五.图片验证邮件验证

  2. php gd图片验证,php笔记之GD库图片创建/简单验证码

    燕十八 公益PHP培训 课堂地址:YY频道88354001 学习社区:www.zixue.it php画图:比如说验证码,缩略图,加水印都要用到GD库,所以要开启gd2库,才能用 首先找到php.in ...

  3. python+tensorflow+captcha库:基于TF快速破解验证码

    python+tensorflow+captcha库:基于TF快速破解验证码 点击打开链接:文章摘自 https://blog.csdn.net/tengxing007/article/details ...

  4. captcha库_将CAPTCHA添加到您的GWT应用程序

    captcha库 什么是验证码? 在一个充满恶意机器人的世界中,您应该怎么做才能保护您宝贵的Web应用程序? 您真正应该做的基本事情之一就是向其中添加CAPTCHA功能. 如果您不熟悉(听起来有些奇怪 ...

  5. Python第三方库巧用,制作图片验证码只需三行代码

    现在验证码的种类真的是越来越多,短信验证码.语音验证码.图片验证码.滑块验证码 - 我们在 PC 的网页端或者手机上的 app 进行登录或者注册时,应该总会遇见图片验证码,比如下面这类: 上面这些图片 ...

  6. vue中纯前端实现滑动图片验证的方式

    Hello,大家好呀~ 众所周知,滑动图片验证一直是各类网站登录和注册的一种校验方式,是用来防止有人恶意使用脚本批量进行操作从而设置的一种安全保护方式. 一般而言,这种滑动图片验证是可以通过后端配合完 ...

  7. SSM框架下实现验证码图片验证功能(源码)

    SSM框架下实现验证码图片验证功能 背景图片资源路径 https://download.csdn.net/download/hero_qhz/10322064 一.首先,在pom里面加上需要用的资源j ...

  8. pdf电子签章多章adobe福昕验证通过图片透明关键技术解析

    由于目前的电子签章市场各种需求都有,例如 office签章,pdf签章,网页签章,图片签章,等等.在这一系列签章里面,由属pdf签章的市场最广,而且技术难度也是最大的,再加上现在移动电子签章逐渐兴起, ...

  9. jquery实现上传图片及图片大小验证、图片预览效果代码

    jquery实现上传图片及图片大小验证.图片预览效果代码 jquery实现上传图片及图片大小验证.图片预览效果代码 上传图片验证 */ function submit_upload_picture() ...

最新文章

  1. 龙格-库塔(Runge-Kutta)方法数学原理及实现
  2. android fps 垂直同步,浅谈Android流畅度
  3. 年度重磅!中国《营销自动化应用基准报告 2021》正式发布!
  4. xilinx fpga 开发工具vivado 软件的安装,使用详细教程
  5. VS2015上配置opencv2.4.11
  6. 数学菜鸟和大佬的关注点有什么不同?
  7. C#异步通信概念及应用浅析 .
  8. gulp临时服务器显示html页面,用Gulp实现CSS压缩和页面自动刷新
  9. php接收base64图片并保存
  10. 理想汽车2021年Q4盈利2.955亿元 CTO王凯离职
  11. 微信又可以发520红包,还新增情人节“撒狗粮”状态:律师提醒注意
  12. LG G8X官方图流出:LG双屏手机也意外曝光 或IFA发布
  13. Java常用集合类:ArrayList
  14. Linux内核——定时器和时间管理
  15. 报表自动化就是连接数据库?错,它打开了数据仓库的大门
  16. 只需一条信息即可远程利用严重的思科 Jabber RCE缺陷
  17. MAC安装淘宝镜像NPM
  18. 信源编码程序设计实验C语言实现,霍夫曼信源编码实验报告
  19. 信道估计(一):信道估计基础知识
  20. 计算机word排版实训报告,Word排版实训报告

热门文章

  1. N宫格之横竖斜的和都相等
  2. FTK应用程序编程接口(API)手册-2
  3. 单片机与PLC的详细比较
  4. 【明解C语言】选择语句之if else
  5. linux搭建ftp服务并创建目录,linux搭建ftp服务器
  6. android studio创建平板模拟器方法
  7. linux gspca usb摄像头驱动添加对新型号的详细移植步骤
  8. 【IT背包客】CIO们的徽杭古道徒步记
  9. 链表、二叉树、图的建立与初始化C源代码
  10. 上传excel到服务器端,并写入到mssql数据库