ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

gin框架中图形验证码的生成和验证

2021-12-11 21:35:33  阅读:247  来源: 互联网

标签:captchaResult tool 验证码 校验 context gin 图形 id


功能和验证码使用原理

  • 本案例中没有使用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
	// 生成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{}{
		"resultCaptcha": &captchaResult,
	})
}

// 校验图片验证码,并清除内存空间
func VerifyCaptcha(id string, value string) bool {
	// TODO 只要id存在,就会校验并清除,无论校验的值是否成功, 所以同一id只能校验一次
	verifyResult := store.Verify(id, value, true)
	return verifyResult
}

github链接

标签:captchaResult,tool,验证码,校验,context,gin,图形,id
来源: https://www.cnblogs.com/mayanan/p/15676924.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有