zoukankan      html  css  js  c++  java
  • 腾讯防水墙实现验证码

    腾讯防水墙实现验证码

    一, 注册防水墙

    1.快速入门文档

    https://cloud.tencent.com/document/product/1110/36839

    2.注册 AppID 和 AppSecret

    3.记录AppID 和 AppSecret

    二, 实现功能

    1.准备一个触发的元素,并绑定一个点击事件

    <button class="login_btn" id="TencentCaptcha" @click="get_verify">登录</button>
    

    2.get_verify

    get_verify() {
    
        // 首先用户名和密码不能为空
        if (!this.username || !this.password) {
            this.$message.error('用户名和密码均不能为空!');
            return;
        }
    
        // 首先从后端获取appId
        this.$axios.get(`${this.$settings.Host}/users/verify/`).then(
            response => {
                // 拿到了appId,构建验证码对象
                let appId = response.data;
                let self = this;
                // 这里其实是给这个元素绑定了一个事件
                let tct = new TencentCaptcha(document.getElementById("TencentCaptcha"),
                    appId, function (res) {
                        // 验证码的回调函数
                        if (res.ret === 0) {
                            // 票据
                            let ticket = res.ticket;
                            let randstr = res.randstr;
                            self.check_verify(ticket, randstr)
                        }
                    }
                );
                // 显示验证码
                tct.show()
            }
        ).catch(error => {
            this.$message.error("获取验证码出错!请联系管理员!")
        })
    },
    

    3.后端提供appID的代码

    # url: /users/verify/
    
    aid = 'xxxxx'
    AppSecretKey = 'xxxxx**'
    
    class VerifyAPIView(APIView):
        def get(self, request):
            return Response(aid, status=status.HTTP_200_OK)
    

    4.check_verify

    check_verify(ticket, randstr) {
        // 将ticket,randstr发送到后端进行验证
        this.$axios.post(`${this.$settings.Host}/users/verify/`, {
            'ticket': ticket,
            'randstr': randstr
        }).then(response => {
            if (response.status === 200) {
                // 校验成功, 进行登录,这里调用之前写好的登录方法
                this.login_handler()
            } else {
                this.$message.error("校验失败!")
            }
        }).catch(error => {
            this.$message.error("校验验证码出错!请联系管理员!")
        })
    }
    

    5.后端校验验证码

    # 需要安装reuqests包
    def post(self, request):
        Ticket = request.data.get('ticket')
        Randstr = request.data.get('randstr')
        # 上线后这里要进行修改,改为动态获取请求的ip
        UserIP = '123.112.18.146'
    
        ret = requests.get('https://ssl.captcha.qq.com/ticket/verify', params={
            'aid': aid,
            'AppSecretKey': AppSecretKey,
            'Ticket': Ticket,
            'Randstr': Randstr,
            'UserIP': UserIP
        })
        dic = ret.json()
        if dic and dic.get('response') == '1':
            return Response('校验成功!', status=status.HTTP_200_OK)
        return Response(dic.get('err_msg'), status=status.HTTP_400_BAD_REQUEST)
    
  • 相关阅读:
    [Abp vNext微服务实践]
    [Abp vNext微服务实践]
    开源项目
    ORA-28002: x天之后口令将过期
    Linux压缩和解压
    cortex-m3内核的芯片截图,以及内核学习
    lpc1768的时钟树梳理和小结
    lp17xx的iap的向量表区别
    关于core_cm3.c和core_cm3.h,Core_cmFunc.h 和 Core_cmInstr.h的理解
    Python从json中提取数据
  • 原文地址:https://www.cnblogs.com/zyyhxbs/p/11814942.html
Copyright © 2011-2022 走看看