gin框架中图形验证码的生成和验证
功能和验证码使用原理

- 本案例中没有使用redis作为缓存,而是使用的内存存储方法
- 下载命令
 go get github.com/mojocn/base64Captcha
请求处理函数
// 生成图片验证码
func (m *MemberController) captcha(context *gin.Context) {
	// 生成图片验证码,并返回给客户端
	tool.GenerateCaptcha(context)
}
// 校验图片验证码
func (m *MemberController) verifyCaptcha(context *gin.Context) {
	var captchaResult tool.CaptchaResult
	err := tool.Decode(context.Request.Body, &captchaResult)  // 等价于:context.ShouldBind(&captchaResult)
	if err != nil {
		tool.Failed(context, "参数解析失败")
	}
	// 获取图片验证码的id和b64s,并校验
	result := tool.VerifyCaptcha(captchaResult.Id, captchaResult.VerifyValue)
	if result {
		fmt.Println("图片验证码校验成功")
		tool.Success(context, "校验成功")
	} else {
		fmt.Println("图片验证码校验失败")
		tool.Failed(context, "校验失败")
	}
}
tool.captcha.go
package tool
import (
	"fmt"
	"github.com/gin-gonic/gin"
	"github.com/mojocn/base64Captcha"
)
type CaptchaResult struct {
	Id          string `json:"id"`
	Base64Blog  string `json:"base_64_blog"`
	VerifyValue string `json:"code"`
}
// 默认存储10240个验证码,每个验证码10分钟过期
var store = base64Captcha.DefaultMemStore
// 生成图片验证码
func GenerateCaptcha(context *gin.Context) {
	// 生成默认数字
	//driver := base64Captcha.DefaultDriverDigit
	// 此尺寸的调整需要根据网站进行调试,链接:
	// https://captcha.mojotv.cn/
	driver := base64Captcha.NewDriverDigit(70, 130, 4, 0.8, 100)
	// 生成base64图片
	captcha := base64Captcha.NewCaptcha(driver, store)
	// 获取
	id, b64s, err := captcha.Generate()
	if err != nil {
		fmt.Println("Register GetCaptchaPhoto get base64Captcha has err:", err)
	}
	captchaResult := CaptchaResult{Id: id, Base64Blog: b64s}
	Success(context, map[string]interface{}{
		"captcha_result": captchaResult,
	})
}
// 校验图片验证码,并清除内存空间
func VerifyCaptcha(id string, value string) bool {
	// TODO 只要id存在,就会校验并清除,无论校验的值是否成功, 所以同一id只能校验一次
        // 注意:id,b64s是空 也会返回true 需要在加判断
	verifyResult := store.Verify(id, value, true)
	return verifyResult
}
gin框架中图形验证码的生成和验证的更多相关文章
- 在gin框架中使用JWT
		在gin框架中使用JWT JWT全称JSON Web Token是一种跨域认证解决方案,属于一个开放的标准,它规定了一种Token实现方式,目前多用于前后端分离项目和OAuth2.0业务场景下. 什么 ... 
- golang gin框架中实现一个简单的不是特别精确的秒级限流器
		起因 看了两篇关于golang中限流器的帖子: Gin 开发实践:如何实现限流中间件 常用限流策略--漏桶与令牌桶介绍 我照着用,居然没效果-- 时间有限没有深究.这实在是一个很简单的功能,我的需求是 ... 
- gin框架中请求路由组的使用
		1. gin框架中可以使用路由组来实现对路由的分类 package main import "github.com/gin-gonic/gin" func main() { rou ... 
- gin框架中的路由
		基本路由 gin框架中采用的路由库是基于httrouter做的 地址为:https://github.com/julienschmidt/httprouter httprouter路由库 点击查看代码 ... 
- Tornado框架实现图形验证码功能
		图形验证码是项目开发过程中经常遇到的一个功能,在很多语言中都有对应的不同形式的图形验证码功能的封装,python 中同样也有类似的封装操作,通过绘制生成一个指定的图形数据,让前端HTML页面通过链接获 ... 
- CodeIgniter(CI)框架中的验证码
		在CodeIgniter框架中,CI本身自带了验证码,但是查看文档的时候,发现: 需要新建一个表,用来存储验证码信息.因为习惯了session存储验证码信息,所以我把我认为比较好看的验证码应用在了CI ... 
- Django中图形验证码(django-simple-captcha)
		django-simple-captcha 在网站开发的登录页面中,经常会需要使用到图形验证码来验证.在Django中,django-simple-captcha库包提供了图形验证码的使用. 下面我们 ... 
- python爬虫中图形验证码的处理
		使用python爬虫自动登录时,遇到需要输入图形验证码的情况,一个比较简单的处理方法是使用打码平台识别验证码. 使用过两个打码平台,打码兔和若快,若快的价格更便宜,识别率相当.若快需要注册两个帐号:开 ... 
- 【解决了一个小问题】gin框架中出现如下错误:"[GIN-debug] [WARNING] Headers were already written. Wanted to override status code 400 with 500"
		POST到数据到一条gin框架的接口后,客户端收到400错误,并且返回了业务中返回的"decode json fail". 关键代码是: func report(c *gin.Co ... 
随机推荐
- react组件配置样式hover效果的实现
			需求 react 自定义一个组件,组件内部样式可以灵活配置 问题 一般样式都可以通过属性传入,比如:颜色,字号等,但是对于一些有hover效果的地方,属性传入后,按照平时css的使用方式不太容易实现 ... 
- Linux(Centos)安装中文字体库(文档中文字符不显示)
			yum -y install fontconfig 在/usr/shared/fonts目录下新建一个目录chinese 然后打开windows本地的字体库 将这里面的所有文件上传到centos里我们 ... 
- 微信公众号开发用户授权登录报"redirect_uri 参数错误"错误
			微信公众号开发 授权获取用户信息报错 "redirect_uri 参数错误" 出现这个情况要检查下 微信公众号配置了网页授权域名 在这里配置微信公众号redirect_uri中的域 ... 
- C/C++ byte 转 int  有符号数,转成Int 无符号数
			p.p1 { margin: 0; font: 12px "Helvetica Neue"; color: rgba(69, 69, 69, 1); min-height: 14p ... 
- 【剑指Offer】构建乘积数组 解题报告(Python)
			[剑指Offer]构建乘积数组 解题报告(Python) 标签(空格分隔): 剑指Offer 题目地址:https://www.nowcoder.com/ta/coding-interviews 题目 ... 
- Unknown Treasure(hdu5446)
			Unknown Treasure Time Limit: 1500/1000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Other ... 
- Codeforces 876B:Divisiblity of Differences(数学)
			B. Divisiblity of Differences You are given a multiset of n integers. You should select exactly k of ... 
- 小试国产开源HTAP分布式NewSQL数据库TiDB-v5.3.0
			概述 定义 TiDB官网 https://pingcap.com/zh/ 最新版本为5.3.0 TiDB GitHub源码 https://github.com/pingcap/tidb TiDB是由 ... 
- zbar解析二维码demo
			开发环境;ubuntu 18.04 IDE:clion 2019 源文件.cpp #include <opencv2/opencv.hpp> #include <zbar.h> ... 
- 使用 IE 或Chrome等浏览器,通过网络抓包的形式,查看发送请求时的网络
			要求: 使用 IE 或Chrome等浏览器,通过网络抓包的形式,查看发送请求时的网络 实现步骤: 1.打开 IE 浏览器,选择"开发者工具",切换到"网络"标签 ... 
