广告
返回顶部
首页 > 资讯 > 精选 >Go怎么整合captcha实现验证码功能
  • 255
分享到

Go怎么整合captcha实现验证码功能

2023-07-05 07:07:19 255人浏览 薄情痞子
摘要

这篇“Go怎么整合captcha实现验证码功能”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Go怎么整合captcha实现验

这篇“Go怎么整合captcha实现验证码功能”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Go怎么整合captcha实现验证码功能”文章吧。

1 captcha概述

captcha的使用设计流程

Go怎么整合captcha实现验证码功能

2 实现代码(使用内存缓存

2.1 后端代码

生成验证码图片api

//GenerateImg 生成验证码图片名称func GenerateImg(w Http.ResponseWriter, req *http.Request) {   w.Header().Set("Access-Control-Allow-Origin", "*")             //允许访问所有域   w.Header().Add("Access-Control-Allow-Headers", "Content-Type")    d := struct {      Captchaid string   }{      captcha.New(),   }   bytes, _ := JSON.Marshal(map[string]interface{}{"code": 0, "msg": "", "count": 0, "data": d.CaptchaId})   w.Write(bytes)}

HTTP服务:

func RunHttp(port string) {   logger := log.Default()   http.Header{}.Set("Access-Control-Allow-Origin", "*")   http.HandleFunc("/user/login", controller.UserLogin) //登录API   http.HandleFunc("/img", controller.GenerateImg)  //生成验证码图片API   http.Handle("/verify/", captcha.Server(captcha.StdWidth, captcha.StdHeight)) //刷新验证码API   logger.Println("Http Server Running port:", port, "...")   http.ListenAndServe(":"+port, nil)}

启动HTTP服务:

func main() {   WEB.RunHttp("8000")}

验证码验证:

//UserLogin 用户登录func UserLogin(w http.ResponseWriter, req *http.Request) {   w.Header().Set("Access-Control-Allow-Origin", "*")   w.Header().Add("Access-Control-Allow-Headers", "Content-Type")   ......   var m map[string]string   body, err := ioutil.ReadAll(req.Body)   if err != nil {      panic(err)   }   json.Unmarshal(body, &m)   var k = m["verify_key"]   var v = m["verify_value"]   res := captcha.VerifyString(k, v)   if res { // 验证通过     ......   } else { // 验证未通过     ......   }   ......}

2.2 前端代码

......<fORM class="layui-form" id="form">    <h4 >登录</h4>    <div class="layui-form-item">        <label class="layui-form-label">账号</label>        <div class="layui-input-inline">            <input type="text" id="loginName" placeholder="请输入账号" autocomplete="off"                   class="layui-input">        </div>    </div>    <div class="layui-form-item">        <label class="layui-form-label">密码</label>        <div class="layui-input-inline">            <input type="passWord" id="loginPwd" placeholder="请输入密码" autocomplete="off"                   class="layui-input">        </div>    </div>    <div class="layui-form-item">        <label class="layui-form-label">验证码</label>        <div class="layui-input-inline">            <input type="text" id="loginV" placeholder="请输入验证码" autocomplete="off"                   class="layui-input">        </div>    </div>    <div class="layui-form-item">        <div class="layui-input-block">            <button class="layui-btn" type="button" onclick="login()">立即提交</button>            <button type="button" onclick="toReGISter()" class="layui-btn layui-btn-primary">注册</button>        </div>    </div></form><img id="verify" onclick="reload()"></img>......<input type="hidden" id="verify_key"></body><script src="//unpkg.com/layui@2.6.8/dist/layui.js"></script><script src="//cdn.staticfile.org/Jquery/1.10.2/jquery.min.js"></script><script>    const base_url = 'http://localhost:8000'    init()    function init() {        $.ajax({            url: base_url + "/img",            type: "GET",            success: function (res) {                var obj = JSON.parse(res)                $("#verify").attr("src", base_url + "/verify/" + obj.data + ".png")                $("#verify_key").attr("value", obj.data)            }        })    }    function reload() {        var url = $("#verify").attr("src");        $("#verify").attr("src", url + "?reload=" + (new Date()).getTime())    }    function login() {        var loginName = $("#loginName").val()        var loginPwd = $("#loginPwd").val()        var verify_key = $("#verify_key").val()        var loginV = $("#loginV").val()        var data = {            'login_name': loginName,            'pwd': loginPwd,            'verify_key': verify_key,            'verify_value': loginV        }        $.ajax({            url: base_url + "/user/login",            type: "POST",            data: JSON.stringify(data),            success: function (res) {               ......            },            ......        })    }   ......   </script>

2.3 注意点

跨域问题:可加入如下代码

w.Header().Set("Access-Control-Allow-Origin", "*")             //允许访问所有域w.Header().Add("Access-Control-Allow-Headers", "Content-Type")

3 自定义Store(使用Redis缓存)

3.1 自定义对象并实现Store抽象

Redis初始化:

var (   RDB          *redis.Client   TokenTimeOut = time.Second * 3600)func init() {   RDB = redis.NewClient(&redis.Options{      Addr:     "127.0.0.1:6379",      Password: "",      DB:       0,   })}

自定义结构体&实现Store抽象:

type StoreImpl struct {   RDB        *redis.Client   Expiration time.Duration}func (impl *StoreImpl) Set(id string, digits []byte) {   impl.RDB.Set(context.Background(), id, string(digits), impl.Expiration)}func (impl *StoreImpl) Get(id string, clear bool) (digits []byte) {   bytes, _ := impl.RDB.Get(context.Background(), id).Bytes()   return bytes}

3.2 配置captcha,加入自定义Store实现

//GenerateImg 生成验证码图片名称func GenerateImg(w http.ResponseWriter, req *http.Request) {   w.Header().Set("Access-Control-Allow-Origin", "*")             //允许访问所有域   w.Header().Add("Access-Control-Allow-Headers", "Content-Type") //header的类型   //需要在New之前进行指定   captcha.SetCustomStore(&verify.StoreImpl{      RDB:        dao.RDB,      Expiration: time.Second * 1000,   })   d := struct {      CaptchaId string   }{      captcha.New(),   }   bytes, _ := json.Marshal(map[string]interface{}{"code": 0, "msg": "", "count": 0, "data": d.CaptchaId})   w.Write(bytes)}

3.3 注意点

  • 需要在captcha.New()之前进行captcha.SetCustomStore()

  • 在captcha.SetCustomStore()之后,自定义的方法实现Store接口时需要完整实现,也就是能真正的实现存储或缓存功能,否则验证码无法生成

以上就是关于“Go怎么整合captcha实现验证码功能”这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注编程网精选频道。

--结束END--

本文标题: Go怎么整合captcha实现验证码功能

本文链接: https://www.lsjlt.com/news/350422.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Go怎么整合captcha实现验证码功能
    这篇“Go怎么整合captcha实现验证码功能”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Go怎么整合captcha实现验...
    99+
    2023-07-05
  • Go整合captcha实现验证码功能
    目录1 captcha概述2 实现代码(使用内存缓存)2.1 后端代码2.2 前端代码2.3 注意点3 自定义Store(使用Redis缓存)3.1 自定义对象并实现Store抽象3...
    99+
    2023-03-01
    Go captcha实现验证码功能 Go captcha验证码 Go captcha
  • SpringBoot整合kaptcha实现图片验证码功能
    目录栗子配置文件SpringBoot项目中pom.xml文件项目代码项目结构SpringBootVerifyCodeApplication.javaVerifyCodeConfig....
    99+
    2022-11-13
  • springboot怎么整合shiro实现多验证登录功能
    这篇“springboot怎么整合shiro实现多验证登录功能”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“springbo...
    99+
    2023-06-08
  • springboot整合JSR303校验功能实现代码
    目录JSR303简介4.7 JSR303校验4.7.1 统一校验的需求4.7.2 统一校验实现4.7.3 分组校验4.7.4 校验规则不满足?JSR303简介 JSR-303 是 J...
    99+
    2023-01-15
    springboot整合JSR303校验 springboot整合JSR303 springboot校验 JSR303校验
  • springboot验证码生成及验证功能怎么实现
    这篇“springboot验证码生成及验证功能怎么实现”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“springboot验证...
    99+
    2023-07-06
  • Python中的行为验证码验证功能怎么实现
    本篇内容主要讲解“Python中的行为验证码验证功能怎么实现”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Python中的行为验证码验证功能怎么实现”吧!验证类型概述滑动拼图创新行为式验证,轻松...
    99+
    2023-07-05
  • C#实现验证码功能
    本文实例为大家分享了C#实现验证码功能的具体代码,供大家参考,具体内容如下 分析 需要四个字符(字母(大小写)+数字) 将四个字符连接成字符串 将连接的字符...
    99+
    2022-11-12
  • Nodejs怎么实现短信验证码功能
    这篇文章将为大家详细讲解有关Nodejs怎么实现短信验证码功能,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。使用Nodejs的开发者愈来越多,基于Nodejs的后台开发也...
    99+
    2022-10-19
  • Spring boot 整合 Redisson实现分布式锁并验证功能
    目录简述1. 在idea中新建spring boot工程并引入所需依赖2. 编写相关代码实现3. 模拟实际环境验证3.1 下载idea的docker插件并配置相关镜像信息3.2 将s...
    99+
    2022-11-13
  • SpringBoot怎么整合Redis缓存验证码
    今天小编给大家分享一下SpringBoot怎么整合Redis缓存验证码的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。1、简介...
    99+
    2023-07-02
  • spring boot结合kaptcha怎么实现一个验证码登陆功能
    本篇文章给大家分享的是有关spring boot结合kaptcha怎么实现一个验证码登陆功能,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。引入kaptcha所需要的jar包,我...
    99+
    2023-05-31
    springboot ptc kaptcha
  • Android 验证码功能实现代码
    先给大家展示下效果图,如果大家感觉还不错,请参考实现代码 很简单的一个例子,点击刷新验证码,刷新当前显示的验证码,点击确定,如果输入的和显示的匹配,就会跳转到下一个界面中,这...
    99+
    2022-06-06
    验证码 Android
  • Ajax+Struts2如何实现验证码验证功能
    这篇文章主要为大家展示了“Ajax+Struts2如何实现验证码验证功能”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Ajax+Struts2如何实现验证码验证...
    99+
    2022-10-19
  • js canvas实现验证码并获取验证码功能
    本文实例为大家分享了js canvas制作验证码并获取验证码的具体代码,供大家参考,具体内容如下 最近没事写了一些小插件,今天要说的是包装一个验证码的js代码,如下: var ...
    99+
    2022-11-12
  • springboot+vue实现验证码功能
    本文实例为大家分享了springboot+vue实现验证码功能的具体代码,供大家参考,具体内容如下 1.工具类 直接用不用改 package com.example.demo.U...
    99+
    2022-11-12
  • java springmvc实现验证码功能
    本文实例为大家分享了springmvc实现验证码功能展示的具体代码,供大家参考,具体内容如下先看效果图: 思路: 首先验证码是一张图片,是一张有着随机字母、数字、图案等组成的图片,所以这图片肯定不是固定不变的,肯定是由后端随机制造出来的,前...
    99+
    2023-05-30
    java springmvc 验证码
  • php中怎么实现一个验证码功能
    php中怎么实现一个验证码功能,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。新建一个captcha.php:php     /...
    99+
    2023-06-17
  • Flutter怎么实现滑动块验证码功能
    这篇文章主要介绍“Flutter怎么实现滑动块验证码功能”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Flutter怎么实现滑动块验证码功能”文章能帮助大家解决问题。本文实现的是一个用于登录时,向右...
    99+
    2023-06-29
  • php怎么实现发送验证码的功能
    本文操作环境:Windows7系统、PHP7.1版、DELL G3电脑php怎么实现发送验证码的功能PHP实现发送短信验证码:一、html代码<li> <span>手机号码:</span> <inp...
    99+
    2021-10-31
    php 验证码
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作