vue实现短信验证优化

平时我们在项目中进行注册等的时候,会经常用到短信验证的功能,但是现在现在很多短信验证都是存在下面几个问题,例如短信验证时间为60s的时候,

1. 当点击完按钮时,倒计时还没到60s过完时,刷新浏览器,验证码按钮又可以重新点击

2.当点击按钮倒计时开始,例如在50s的时候我关闭了浏览器,过了5s后,我在打开,此时时间倒计时的时间应该是45s左右,但是当重新打开浏览器的时候,按钮又可以重新点击了

为了解决上面的两个问题,就需要把时间都写到localstorage里面去,当打开页面的时候,就去localstorage里面去取,我这里就贴上我的解决方法,因为前几天有个vue的项目用到该方法,所以我这里就写个vue的方法出来吧

组件里面的html代码:

 <div class="mtui-cell__ft" @click="getCode">
          <button class="mtui-vcode-btn mtui-text-center" v-if="flag">获取短信</button>
          <button class="mtui-vcode-btn mtui-text-center" v-if="!flag">剩余{{second}}s</button>
 </div>

重点来啦

在data里面定义几个需要用到的变量:

 second: 60,
 flag: true,
 timer: null // 该变量是用来记录定时器的,防止点击的时候触发多个setInterval

获取短信验证的方法:

        getCode() {
            let that = this;
            if (that.flag) {
                that.flag = false;
                let interval = window.setInterval(function() {
                    that.setStorage(that.second);
                    if (that.second-- <= 0) {
                        that.second = 60;
                        that.flag = true;
                        window.clearInterval(interval);
                    }
                }, 1000);
            }
        }

写入和读取localstorage:

setStorage(parm) {
            localStorage.setItem("dalay", parm);
            localStorage.setItem("_time", new Date().getTime());
        },
        getStorage() {
            let localDelay = {};
            localDelay.delay = localStorage.getItem("dalay");
            localDelay.sec = localStorage.getItem("_time");
            return localDelay;
        }

防止页面刷新是验证码失效:

judgeCode() {
            let that = this;
            let localDelay = that.getStorage();
            let secTime = parseInt(
                (new Date().getTime() - localDelay.sec) / 1000
            );
            console.log(localDelay);
            if (secTime > localDelay.delay) {
                
// 此处赋值时为了让浏览器打开的时候,直接就显示剩余的时间
that.flag = true; console.log("已过期"); } else { that.flag = false; let _delay = localDelay.delay - secTime; that.second = _delay; that.timer = setInterval(function() { if (_delay > 1) { _delay--; that.setStorage(_delay); that.second = _delay; that.flag = false; } else { that.flag = true; window.clearInterval(that.timer); } }, 1000); } }然后在html挂载页面完成后的生命钩子(mounted)中调用judgeCode()方法就能实现该功能了


  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring Boot和Vue可以很好地配合实现手机短信登录功能。下面是大致的实现步骤: 1. 后端实现: - 使用Spring Boot框架搭建后端服务器。 - 引入相关的依赖,如Spring Boot Starter Web、Spring Boot Starter Security等。 - 配置短信服务商的相关参数,如接口地址、API密钥等。 - 定义短信验证码的生成逻辑,可以使用短信服务商提供的SDK或自行实现。 - 定义登录接口,接收前端传递的手机号和验证码,验证验证码是否正确,如果正确则生成token返回给前端。 - 使用Spring Security提供的机制,将登录接口设置为不需要认证即可访问。 2. 前端实现: - 使用Vue框架搭建前端页面。 - 设计登录页面,包含手机号输入框、验证码输入框和登录按钮。 - 使用Vue的表单验证机制,对手机号和验证码进行前端验证,如手机号格式是否正确、验证码是否为空等。 - 使用Axios或其他HTTP请求库,调用后端提供的登录接口,传递手机号和验证码。 - 接收后端返回的token,并将其保存在本地(如LocalStorage)。 - 后续的请求可以在请求头中加上Authorization字段,值为"Bearer " + token,以实现鉴权。 综上所述,通过Spring Boot提供后端接口和短信服务的集成,再通过Vue构建前端页面和发送请求,可以实现手机短信登录的功能。整个流程包括生成验证码、发送验证码、验证验证码、生成token等步骤。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值