zoukankan      html  css  js  c++  java
  • 验证码校验模板

    功能描述

    在开发过程中遇到关于验证码校验的需求,为了以后的高效开发,利用简单的例子抽取代码如下:

    开发框架

    vue + ssm + redis + dubbo + mysql + sms


    html页面

    <script>
      var id = getUrlParam("id");
    </script>
    ...
    
    <div class="input-row">
        <label>手机号</label>
        <input v-model="orderInfo.telephone" type="text" class="input-clear" placeholder="请输入手机号">
        <input style="font-size: x-small;" id="validateCodeButton" @click="sendValidateCode()" type="button" value="发送验证码">
    </div>
    <div class="input-row">
        <label>验证码</label>
        <input v-model="orderInfo.validateCode" type="text" class="input-clear" placeholder="请输入验证码">
    </div>
    

    js文件

         var clock = '';//定时器对象,用于页面30秒倒计时效果
         var nums = 30;  // 30 秒倒计时,可自行修改
         var validateCodeButton;
          //基于定时器实现30秒倒计时效果
          function doLoop() {
              validateCodeButton.disabled = true;//将按钮置为不可点击
              nums--;
              if (nums > 0) {
                  validateCodeButton.value = nums + '秒后重新获取';
              } else {
                  clearInterval(clock); //清除js定时器
                  validateCodeButton.disabled = false;
                  validateCodeButton.value = '重新获取验证码';
                  nums = 30; //重置时间
              }
          }
    

    VUE代码

     //发送验证码
    sendValidateCode(){
        // 校验手机号格式
        // 获取手机号
        var telephone = this.orderInfo.telephone;
        // 调用js文件中的方法
        if (!checkTelephone(telephone)) {
            this.$message.error("请输入正确的手机号");
            return false;
        }
        // 设置倒计时
        // 获取发送校验码按钮
        validateCodeButton = document.getElementById("validateCodeButton");
        clock = window.setInterval(doLoop,1000);
        // 发送ajax请求
        axios.get("/validateCode/send4Order.do?telephone=" + telephone).then((res)=>{
            if (!res.data.flag) {
                // 验证码发送失败
                this.$message.error(res.data.message);
            }
        })
    },
    

    后端代码抽取

    发送验证码

    我在这里自定义了一个验证码工具类用于生成验证码ValidateCodeUtils

    public Result send4Order(String telephone){
            // 生成验证码
            Integer code = ValidateCodeUtils.generateValidateCode(4);
    
            try {
                //发送短信
    //            SMSUtils.sendShortMessage(telephone,code.toString());
                System.out.println("发送的手机验证码为:" + code);
    
            } catch (Exception e) {
                e.printStackTrace();
                //验证码发送失败
                return new Result(false, MessageConstant.SEND_VALIDATECODE_FAIL);
            }
            //将生成的验证码缓存到redis
            jedisPool.getResource().setex(
                    telephone + RedisMessageConstant.SENDTYPE_ORDER,5 * 60,code.toString());
            //验证码发送成功
            return new Result(true,MessageConstant.SEND_VALIDATECODE_SUCCESS);
        }
    

    校验验证码

    public Result submit(@RequestBody Map map){
    	// ① 校验手机验证码
            // 获取手机号
            String telephone = (String) map.get("telephone");
            // 获取 Redis 中的验证码
            String codeInRedis = jedisPool.getResource().get(telephone + RedisMessageConstant.SENDTYPE_ORDER);
            // 获取用户输入的验证码
            String validateCode = (String) map.get("validateCode");
    
            // 校验验证码
            if (codeInRedis == null ||!codeInRedis.equalsIgnoreCase(validateCode)) {
                return new Result(false, MessageConstant.VALIDATECODE_ERROR);
            }
        
    }
    
  • 相关阅读:
    c/c++指针
    C++小思
    gvim-ide plugins
    Windows下文件的所有和权限
    C++枚举类型
    linux的cgroup控制
    linux的free命令
    linux下可以禁用的一些服务
    bat programming is easy and powerful
    c++类定义代码的分离
  • 原文地址:https://www.cnblogs.com/tianwenxin/p/14974423.html
Copyright © 2011-2022 走看看