首页 > 其他分享 >Base64Captcha 登录验证码

Base64Captcha 登录验证码

时间:2023-12-26 12:12:25浏览次数:54  
标签:base64Captcha Base64Captcha 登录 nil http 验证码 captcha gin

Captcha
GitHub 地址: github.com/dchest/captcha
简介: Captcha 是一个功能强大的验证码生成库,支持生成图片和音频验证码。它能够生成数字、字母、数字字母组合等各种类型的验证码,并且使用简单方便。

Gin-Utils
GitHub 地址: github.com/gin-contrib/gin-utils
简介: Gin-Utils 是一个针对 Gin 框架的实用工具集,其中包含了生成验证码的功能。它能够轻松地生成图片验证码,并且与 Gin 框架很好地集成。

BaseCaptcha
GitHub 地址: github.com/mojocn/base64Captcha
简介: BaseCaptcha 是一个基于 Golang 的验证码生成库,不过它提供了针对多种语言的接口。虽然是用 Golang 编写的,但可以通过其提供的接口在 Python 中使用。

 

正式开始Captcha

Captcha Go-Gin
获取库:
go get github.com/mojocn/base64Captcha

源码:

  1 package login
  2 
  3 import (
  4     "fmt"
  5     "go-admin/service/errcode"
  6     "net/http"
  7 
  8     "github.com/gin-gonic/gin"
  9     "github.com/mojocn/base64Captcha"
 10 )
 11 
 12 var (
 13     CaptchaStore base64Captcha.Store
 14 )
 15 
 16 func InitCatcha() {
 17     // 创建验证码的配置
 18     CaptchaStore = base64Captcha.DefaultMemStore
 19 }
 20 
 21 // @Summary 获取验证码
 22 // @Schemes http
 23 // @Description 登录-获取验证码
 24 // @Tags 用户
 25 // @Produce json
 26 // @Success 200 {object} CaptchaReply  "successfully"
 27 // @Router /login/captcha [get]
 28 func Captcha(c *gin.Context) {
 29     defer func() {
 30         if r := recover(); r != nil {
 31             c.JSON(http.StatusInternalServerError, gin.H{
 32                 "code": errcode.ERRInternalServerError,
 33                 "msg":  fmt.Sprintf("%v", r),
 34             })
 35         }
 36     }()
 37     // driver := base64Captcha.NewDriverDigit(80, 240, 6, 0.7, 80)
 38     driver := base64Captcha.NewDriverString(
 39         80, 240, 6, 1, 4,
 40         "123456789abcdefghjkmnpqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ", // 包含数字和字母的字符集
 41         nil, nil, nil)
 42     captcha := base64Captcha.NewCaptcha(driver, CaptchaStore)
 43     id, b64s, answer, err := captcha.Generate()
 44     fmt.Println("####################", answer, " ", id)
 45     if err != nil {
 46         c.JSON(http.StatusInternalServerError, gin.H{"error": "Failed to generate captcha"})
 47         return
 48     }
 49 
 50     c.JSON(http.StatusOK, gin.H{
 51         "code": 0,
 52         "msg":  "",
 53         "result": CaptchaReply{
 54             CaptchaID: id,
 55             ImageData: b64s,
 56         },
 57     })
 58 }
 59 
 60 // @Summary 手动校验验证码
 61 // @Schemes http
 62 // @Description 登录-获取验证码
 63 // @Tags 用户
 64 // @Accept json
 65 // @Produce json
 66 // @Param request body VerifyRequest true "Verify request object"
 67 // @Success 200 {object} comm.CommReply  "successfully"
 68 // @Router /login/verify [post]
 69 func Verify(c *gin.Context) {
 70     defer func() {
 71         if r := recover(); r != nil {
 72             c.JSON(http.StatusInternalServerError, gin.H{
 73                 "code": errcode.ERRInternalServerError,
 74                 "msg":  fmt.Sprintf("%v", r),
 75             })
 76         }
 77     }()
 78 
 79     in := new(VerifyRequest)
 80     err := c.ShouldBindJSON(in)
 81     if err != nil {
 82         c.JSON(http.StatusOK, gin.H{
 83             "code": -1,
 84             "msg":  err.Error(),
 85         })
 86         return
 87     }
 88     captchaId := in.CaptchaID
 89     captchaSolution := in.CaptchaAnswer
 90 
 91     if captchaId == "" || captchaSolution == "" {
 92         c.JSON(http.StatusBadRequest, gin.H{
 93             "code": http.StatusBadRequest,
 94             "msg":  "captcha_id and captcha_solution are required",
 95         })
 96         return
 97     }
 98     driver := base64Captcha.NewDriverString(
 99         80, 240, 6, 1, 4,
100         "123456789abcdefghjkmnpqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ", // 包含数字和字母的字符集
101         nil, nil, nil)
102     captcha := base64Captcha.NewCaptcha(driver, CaptchaStore)
103 
104     // 验证用户输入的验证码
105     if captcha.Verify(captchaId, captchaSolution, true) {
106         c.JSON(http.StatusOK, gin.H{
107             "code": 0,
108             "msg":  "successfully",
109         })
110     } else {
111         c.JSON(http.StatusUnauthorized, gin.H{
112             "code": http.StatusUnauthorized,
113             "msg":  "Invalid captcha",
114         })
115     }
116 }
117 
118 func verify_(data *LoginPasswordRequest) (res bool) {
119     res = false
120     driver := base64Captcha.NewDriverString(
121         80, 240, 6, 1, 4,
122         "123456789abcdefghjkmnpqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ", // 包含数字和字母的字符集
123         nil, nil, nil)
124     captcha := base64Captcha.NewCaptcha(driver, CaptchaStore)
125 
126     return captcha.Verify(data.CaptchaID, data.CaptchaAnswer, true)
127 }

 

标签:base64Captcha,Base64Captcha,登录,nil,http,验证码,captcha,gin
From: https://www.cnblogs.com/watermeloncode/p/17927855.html

相关文章

  • 一个ssh无法远程登录的问题跟踪解决
    用户反馈龙芯服务器系统loongnix-server使用root用户ssh远程登录,有时候可以有时候又无法登录,频繁出现错误:Permissiondenied,pleasetryagain。我分析可能是防火墙拦截,也可能是登录连接数达到限制,无法接入新的连接,后去掉防火墙直连还是出现问题,查看日志:cat/var/log/secure|gre......
  • (建议收藏)一篇汇总常见华为企业网络设备缺省登录信息与恢复账号密码
    作者:网络之路一天 首发公众号:网络之路博客(ID:NetworkBlog)给大家整理了常见的华为路由器、交换机、无线AC、AP、防火墙的初始化登录密码,以及恢复密码的时候用到的缺省信息,up也是把所有产品手册找了一圈,汇总起来,希望大家可以点赞、三连支持一拨~~~(每个系列的详细登录方法也出过视频,......
  • Gitlab 登录报422错误,账号密码是正确的
    登录页报错误:thechangeyourequestedwasrejected[root@ebs-139266~]#dateTueDec1901:05:32CST2023登录服务器发现服务器时间不正确使用命令同步时间[root@ebs-139266~]#ntpdatentp.aliyun.com19Dec10:48:12ntpdate[24954]:steptimeserver203.107.6.88offs......
  • 鸿蒙 Ark ui 实战登录界面请求网络实现教程
    团队介绍作者:徐庆团队:坚果派公众号:“大前端之旅”润开鸿生态技术专家,华为HDE,博客专家,超级个体,特邀嘉宾,签约作者,OpenHarmony布道师,电子发烧友专家博客,51CTO博客专家,擅长HarmonyOS/OpenHarmony应用开发、熟悉服务卡片开发。欢迎合作。前言:各位同学有段时间没有见面因为一直很忙所......
  • 某网站登录协议分析
    目录使用工具流程分析访问首页点击登录按钮需要处理的点密码加密算法还原这样密码算法就还原了,接下来分析一下验证码模拟浏览器请求使用工具#浏览器谷歌#抓包工具Fiddler#语言python与js流程分析访问首页点击登录按钮#登录包为httppost请求提交参数(js......
  • jenkins如何添加ssh认证登录
    1.本地写代码,然后把代码上传到gitlab网站上,这里不赘诉,不会的请参考步骤参考:https://www.cnblogs.com/pingguomang/p/17926569.html 2.搭建jenkins,这里不赘诉3.找到一台服务器,生成一对公钥和私钥。这里不一定是你部署服务的那台节点的公钥和私钥,任意一个服务器都可以哈,只要是一......
  • 如何在Go语言中处理网站登录和会话保持问题
    在进行网页爬取时,有些网站可能要求用户登录后才能访问特定页面或获取数据。为了处理这种情况,我们需要在Go语言中模拟用户登录并保持会话。本文将介绍一些在Go语言中处理网站登录和会话保持的方法和技巧。1.理解网站登录流程在开始处理登录和会话保持之前,首先需要理解目标网站的登录......
  • 微信小程序从django后端获取数据、获取登录用户名
    关键词:微信小程序、从后端获取数据、django后端、传递登录用户名、获取当前登录用户名/***生命周期函数--监听页面加载*/onLoad(options){letuser=wx.getStorageSync('user');varusername=user.nickName;varcasename=options.casename;......
  • Shiro 框架中如何更新Redis的超时登录时间?
    在Shiro框架中,可以通过实现SessionDAO接口来将会话信息保存到Redis中,并且可以通过实现SessionValidationScheduler接口来定期检查会话是否过期。因此,要更新Redis中的超时登录时间,可以按照以下步骤进行操作:实现SessionDAO接口,将会话信息保存到Redis中。在实现SessionDAO接口时,可以使......
  • 记录--前端验证码破解
    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助最近受够了公司内部站点每次登陆都需要填写用户名和密码,还有输入验证码。要是能够直接跳过登陆页面就好啦。说干就干,决定使用油猴插件实现自动登陆功能。其中最难解决的就是验证码破解,花了一天的时间完美解决,现在......