前端滑动验证码实现

本文介绍了如何在腾讯云平台上使用滑动验证码进行Web客户端登录,包括JavaScript代码示例,从注册领取验证码到验证并使用ticket和randstr进行登录的过程。
摘要由CSDN通过智能技术生成

先注册领取腾讯滑动验证码登录 - 腾讯云  在控制台免费试用7天 根据官方文档验证码 Web 客户端接入-接入指引-文档中心-腾讯云引入接口 在html中引入


<script src="https://turing.captcha.qcloud.com/TCaptcha.js"></script>

创建一个js文件 

 // 定义回调函数
 function callback(res) {
    // 第一个参数传入回调结果,结果如下:
    // ret         Int       验证结果,0:验证成功。2:用户主动关闭验证码。
    // ticket      String    验证成功的票据,当且仅当 ret = 0 时 ticket 有值。
    // CaptchaAppId       String    验证码应用ID。
    // bizState    Any       自定义透传参数。
    // randstr     String    本次验证的随机串,后续票据校验时需传递该参数。
    console.log('callback:', res);




    // res(用户主动关闭验证码)= {ret: 2, ticket: null}
    // res(验证成功) = {ret: 0, ticket: "String", randstr: "String"}
    // res(请求验证码发生错误,验证码自动返回terror_前缀的容灾票据) = {ret: 0, ticket: "String", randstr: "String",  errorCode: Number, errorMessage: "String"}
    // 此处代码仅为验证结果的展示示例,真实业务接入,建议基于ticket和errorCode情况做不同的业务处理
    if (res.ret === 0) {
        // 复制结果至剪切板
        var str = '【randstr】->【' + res.randstr + '】      【ticket】->【' + res.ticket + '】';
        var ipt = document.createElement('input');
        ipt.value = str;
        document.body.appendChild(ipt);
        ipt.select();
        document.execCommand("Copy");
        document.body.removeChild(ipt);
        alert('1. 返回结果(randstr、ticket)已复制到剪切板,ctrl+v 查看。2. 打开浏览器控制台,查看完整返回结果。');
    }
}


// 定义验证码js加载错误处理函数
function loadErrorCallback() {
    var appid = '194610789';
    // 生成容灾票据或自行做其它处理
    var ticket = 'terror_1001_' + appid + '_' + Math.floor(new Date().getTime() / 1000);
    callback({
      ret: 0,
      randstr: '@'+ Math.random().toString(36).substr(2),
      ticket: ticket,
      errorCode: 1001,
      errorMessage: 'jsload_error'
    });
 }



主要代码模块 

// 点击登录

const handleSubmit = () => {

    lgLoading.value = true

    formRef.value

        .validate()

        .then(async () => {

            const appId = '194610789';

            if (window.TencentCaptcha) {

                var captcha = new TencentCaptcha(appId, function (res) {

                    // 验证码验证成功的回调函数

                    if (res.ret === 0) { // ret 为 0 表示验证成功

                        // 这里添加验证成功后的代码,例如提交表单

                        loginWithCaptcha(res.ticket, res.randstr); // 使用验证码的票据和随机字符串来登录

                    }

                });

                // 显示验证码弹窗

                captcha.show();



            }

            lgLoading.value = false

        })

        .catch(() => {

            lgLoading.value = false

        })

}



const loginWithCaptcha = async (ticket, randstr) => {

    // 向后端发送请求进行登录

    // 确保后端验证了ticket和randstr的有效性

    try {

        await acquireSubmit();

        await loginPush();

    } catch (error) {

        console.log(error);;

    }finally{

        lgLoading.value = false;

    }

};

196684808 

  • 18
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以使用第三方库 React Swipeable,它提供了一个 Swipeable 组件,可以使用触摸操作进行滑动。结合 Canvas 可以实现滑动验证码功能。 具体实现步骤如下: 1. 安装 React Swipeable:`npm install react-swipeable --save` 2. 创建 Swipeable 组件,并添加 onTouchEnd 事件监听: ```jsx import React from 'react'; import Swipeable from 'react-swipeable'; class SwipeableCanvas extends React.Component { handleSwipe = () => { // 滑动成功,执行相应操作 } render() { return ( <Swipeable onSwiped={this.handleSwipe}> <canvas width="300" height="150"></canvas> </Swipeable> ); } } export default SwipeableCanvas; ``` 3. 在 handleSwipe 方法中,获取 canvas 上下文并绘制验证码: ```jsx handleSwipe = () => { const canvas = document.getElementsByTagName('canvas')[0]; const ctx = canvas.getContext('2d'); const text = 'ABCDEFGHJKMNPQRSTWXYZabcdefhijkmnprstwxyz2345678'; // 绘制背景 ctx.fillStyle = '#f5f5f5'; ctx.fillRect(0, 0, canvas.width, canvas.height); // 绘制文字 ctx.font = 'bold 50px Arial'; for (let i = 0; i < 4; i++) { const char = text.charAt(Math.floor(Math.random() * text.length)); ctx.fillStyle = `rgb(${Math.random() * 255},${Math.random() * 255},${Math.random() * 255})`; ctx.fillText(char, i * 70 + 20, 80); } } ``` 4. 在 Swipeable 组件中添加 onTouchMove 事件监听,实现滑动效果: ```jsx handleTouchMove = (e) => { e.preventDefault(); const canvas = document.getElementsByTagName('canvas')[0]; const ctx = canvas.getContext('2d'); // 获取 canvas 左边距离页面左边的距离 const canvasLeft = canvas.getBoundingClientRect().left; // 获取触摸点在 canvas 中的坐标 const touchX = e.changedTouches[0].clientX - canvasLeft; const touchY = e.changedTouches[0].clientY - canvas.offsetTop; // 绘制滑动轨迹 ctx.beginPath(); ctx.moveTo(this.lastX, this.lastY); ctx.lineTo(touchX, touchY); ctx.strokeStyle = '#000'; ctx.lineWidth = 5; ctx.stroke(); this.lastX = touchX; this.lastY = touchY; } handleSwipe = () => { // 判断滑动是否成功,执行相应操作 } handleTouchStart = (e) => { const canvas = document.getElementsByTagName('canvas')[0]; // 获取 canvas 左边距离页面左边的距离 const canvasLeft = canvas.getBoundingClientRect().left; // 获取触摸点在 canvas 中的坐标 this.lastX = e.changedTouches[0].clientX - canvasLeft; this.lastY = e.changedTouches[0].clientY - canvas.offsetTop; } render() { return ( <Swipeable onSwiped={this.handleSwipe} onSwiping={this.handleTouchMove} onSwipingStart={this.handleTouchStart} > <canvas width="300" height="150"></canvas> </Swipeable> ); } ``` 这样就可以实现一个基本的滑动验证码组件。需要注意的是,为了减少作弊行为,还需要在后端进行相应的验证。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值