功能和验证码使用原理

  • 本案例中没有使用redis作为缓存,而是使用的内存存储方法

github链接地址

  • 下载命令

    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
}

测试图片链接

github链接

gin框架中图形验证码的生成和验证的更多相关文章

  1. 在gin框架中使用JWT

    在gin框架中使用JWT JWT全称JSON Web Token是一种跨域认证解决方案,属于一个开放的标准,它规定了一种Token实现方式,目前多用于前后端分离项目和OAuth2.0业务场景下. 什么 ...

  2. golang gin框架中实现一个简单的不是特别精确的秒级限流器

    起因 看了两篇关于golang中限流器的帖子: Gin 开发实践:如何实现限流中间件 常用限流策略--漏桶与令牌桶介绍 我照着用,居然没效果-- 时间有限没有深究.这实在是一个很简单的功能,我的需求是 ...

  3. gin框架中请求路由组的使用

    1. gin框架中可以使用路由组来实现对路由的分类 package main import "github.com/gin-gonic/gin" func main() { rou ...

  4. gin框架中的路由

    基本路由 gin框架中采用的路由库是基于httrouter做的 地址为:https://github.com/julienschmidt/httprouter httprouter路由库 点击查看代码 ...

  5. Tornado框架实现图形验证码功能

    图形验证码是项目开发过程中经常遇到的一个功能,在很多语言中都有对应的不同形式的图形验证码功能的封装,python 中同样也有类似的封装操作,通过绘制生成一个指定的图形数据,让前端HTML页面通过链接获 ...

  6. CodeIgniter(CI)框架中的验证码

    在CodeIgniter框架中,CI本身自带了验证码,但是查看文档的时候,发现: 需要新建一个表,用来存储验证码信息.因为习惯了session存储验证码信息,所以我把我认为比较好看的验证码应用在了CI ...

  7. Django中图形验证码(django-simple-captcha)

    django-simple-captcha 在网站开发的登录页面中,经常会需要使用到图形验证码来验证.在Django中,django-simple-captcha库包提供了图形验证码的使用. 下面我们 ...

  8. python爬虫中图形验证码的处理

    使用python爬虫自动登录时,遇到需要输入图形验证码的情况,一个比较简单的处理方法是使用打码平台识别验证码. 使用过两个打码平台,打码兔和若快,若快的价格更便宜,识别率相当.若快需要注册两个帐号:开 ...

  9. 【解决了一个小问题】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 ...

随机推荐

  1. sql改写优化:简单规则重组实现

    我们知道sql执行是一个复杂的过程,从sql到逻辑计划,到物理计划,规则重组,优化,执行引擎,都是很复杂的.尤其是优化一节,更是内容繁多.那么,是否我们本篇要来讨论这个问题呢?答案是否定的,我们只特定 ...

  2. 【LeetCode】694. Number of Distinct Islands 解题报告 (C++)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客:http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 DFS 日期 题目地址:https://leetcod ...

  3. Code(hdu5212)

    Code Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Submis ...

  4. P1599 货币

    背景 又是一道水题 描述 在某个神秘的星球上有一种货币,它有一种奇怪的兑换规则 你有且仅有一枚面值为n的金币,你可以去银行进行兑换,也可以不兑换 如果去银行兑换,兑换的规则是这样的:用面值为a的金币去 ...

  5. 【Java例题】3.4求a+aa+aaa+aaaa+... ...+aa...a(n个

    4. package chapter3; import java.util.*; public class demo4 { public static void main(String[] args) ...

  6. The Many Faces of Robustness: A Critical Analysis of Out-of-Distribution Generalization (DeepAugment)

    目录 概 主要内容 ImageNet-R StreetView StoreFronts (SVSF) DeepFashion Remixed DeepAugment 实验结论 代码 Hendrycks ...

  7. Kernel PCA and De-Noisingin Feature Spaces

    目录 引 主要内容 Kernel PCA and De-Noisingin Feature Spaces 引 kernel PCA通过\(k(x,y)\)隐式地将样本由输入空间映射到高维空间\(F\) ...

  8. 每天学一点——while循环(2)、for循环

    while循环(2) while+continue 打印数字的话相信朋友们在python中不会一个个的print吧 eg: 或者是打印列表里的元素 eg 这种方法只适用于你知道里面有多少个元素, 不然 ...

  9. Rainbond 对接 Istio 原理讲解和代码实现分析

    一.背景 现有的 ServiceMesh 框架有很多,如 Istio.linkerd等.对于用户而言,在测试环境下,需要达到的效果是快.开箱即用.但在生产环境下,可能又有熔断.延时注入等需求.那么单一 ...

  10. html基础 字符实体 用于html中特殊符号的展示 比如:多个空格、代码展示

    结构:&+英文: 常见的字符实体