后台返回图形验证码 前端如何处理

本文探讨了后端返回图形验证码时,如何避免前端axios请求中遇到的数据乱码问题,通过原生Blob处理并介绍了一个使用XMLHttpRequest的示例。前端开发者将学习正确处理GET请求响应类型为blob的情况。

后端返回图形验证码

在这里插入图片描述

console 打印的结果

此时前端用axios请求如果直接去拿返回值,就会发现…额…乱码了啊(数据流)
在这里插入图片描述

前端处理

用原生 转化

    getImg() {
      var that = this;
      var windowUrl = window.URL || window.webkitURL; //处理浏览器兼容性
      var xhr = new XMLHttpRequest();
      var url = `${window.API_BASE_URI}/api/v1/mbc/code`; //验证码请求地址
      xhr.open("GET", url, true);
      xhr.responseType = "blob";
      xhr.onload = function() {
        if (this.status == 200) {
          var blob = this.response;
          that.imgCode = windowUrl.createObjectURL(blob);
        }
      };
      xhr.send();
    },
前端开发中,滑动图形验证码是一种常见的安全验证方式,用于防止恶意程序或自动化脚本进行暴力破解和恶意登录。滑动图形验证码通过用户手动拖动滑块来完成拼图,从而验证用户是真实的人类用户。 以下是一个简单的实现步骤: 1. **生成验证码图片**:前端生成一张带有缺口的图片,缺口位置随机生成。 2. **显示滑动区域**:在图片下方显示一个滑动条,用户需要将滑块拖动到正确的位置。 3. **验证用户操作**:当用户完成滑动操作后,前端将滑动距离与后台生成的缺口位置进行比对,判断是否通过验证。 ### 示例代码 #### HTML ```html <div id="captcha"> <img src="captcha.jpg" alt="Captcha Image"> <div id="slider"></div> </div> ``` #### CSS ```css #captcha { position: relative; width: 300px; height: 200px; } #slider { position: absolute; top: 160px; left: 0; width: 50px; height: 40px; background-color: #ccc; cursor: pointer; } ``` #### JavaScript ```javascript document.getElementById('slider').addEventListener('mousedown', function(e) { const slider = this; const captcha = document.getElementById('captcha'); const initialX = e.clientX; const initialLeft = parseInt(slider.style.left, 10); function onMouseMove(e) { const dx = e.clientX - initialX; const newLeft = initialLeft + dx; if (newLeft >= 0 && newLeft <= captcha.clientWidth - slider.clientWidth) { slider.style.left = newLeft + 'px'; } } function onMouseUp() { document.removeEventListener('mousemove', onMouseMove); document.removeEventListener('mouseup', onMouseUp); // 验证滑动距离 const expectedPosition = 150; // 假设缺口位置是150px if (Math.abs(parseInt(slider.style.left, 10) - expectedPosition) < 5) { alert('验证通过'); } else { alert('验证失败,请重试'); slider.style.left = '0px'; } } document.addEventListener('mousemove', onMouseMove); document.addEventListener('mouseup', onMouseUp); }); ``` ### 解释 1. **HTML部分**:定义了一个容器`#captcha`,其中包含一张图片和滑块`#slider`。 2. **CSS部分**:设置容器的尺寸和滑块的样式。 3. **JavaScript部分**:添加事件监听器,监听滑块的`mousedown`事件,拖动滑块时更新其位置,并在`mouseup`事件中验证滑动距离。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值