canvas 手写滑动验证

最近菜鸟公司要做一个滑动验证,但是看渡一里面说的是:如果是行为验证的话(自动化图灵测试 —— 一定是服务端验证),后端需要搜集很多东西,包括用户的鼠标轨迹、点击速度等行为,反正就是很复杂,最好上框架,具体见:

https://www.bilibili.com/video/BV1RerqYzEVd/?vd_source=92e798cdb4edf5c278fe66aa04ccd483

但是菜鸟公司不用做这么复杂,就是前端滑动一下,免得别人登录太快的问题,减少攻击次数(其实只是领导感觉有用,其实屁用没有,就是给客户感觉牛皮的样子,手动狗头)!

思路

两个canvas:canvas1上画一张图并用两个圆覆盖在上面(一个正确、一个错误),然后canvas2只画正确的圆覆盖住的那部分图片,然后滑块操作的就是移动整个canvas2,只要停止的X坐标和我设置的正确的X坐标符合一种关系,就验证通过!

实现

菜鸟感觉自己的代码和注释都写得挺好的,这里直接上代码

<script setup>
import {
    ElMessage } from "element-plus";
import {
    onMounted } from "vue";

const props = defineProps({
   
  mistakeValue: {
   
    type: Number,
    default: 3
  }
});

const emit = defineEmits(["pass"]);

// 随机图片
let imgurl = "https://picsum.photos/300/200";

// 绑定滑块值
let value1 = ref(0);
let movecanvas = ref(null);
let loading = ref(false);

// 保存数据,方便验证失败重绘
let rightX, r1, r2, r1y, r2y, errorX;

// 生成一个随机数 30 - 270之间(不能超出边界)
const random = (min = 31, max = 269) => {
   
  return Math.floor(Math.random() * (max - min + 1)) + min;
};

const init = () => {
   
  loading.value = true;
  // 保存正确的偏移值
  rightX = random();
  // 两个圆的半径
  r1 = random(20, 30);
  r2 = r1 - 5;
  // 随机生成两个圆的y坐标(不能超出边界)
  r1y = random(31, 169);
  r2y = random(31
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

PBitW

可以去掘金看更完善版本

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值