1、前端页面主要代码

这里点击发送验证码按钮通过ajax将相关信息传到后端getSms方法中。

<form class="form-horizontal form-signin" method="post" action="{:url('register/forget')}"><div class="page-header"><h1 class="text-center"><small>Ustate忘记密码</small></h1></div><div class="form-group"><label for="mobile" class="sr-only">Mobile</label><input type="tel" id="mobile" class="form-control" placeholder="手机号" name="mobile" required></div><div class="form-group"><label for="inputMobileCode" class="sr-only">MobileCode</label><input type="text" id="inputMobileCode" class="form-control" style="display: inline;width: 200px;" name="mobile_code" placeholder="验证码" required><button class="btn btn-info" type="button" id="getyzm" onclick="getCode(document.getElementById('mobile').value)">获取验证码</button></div><div class="form-group"><label for="inputPassword" class="sr-only">Password</label><input type="password" id="inputPassword" class="form-control" name="password" placeholder="密码" required></div><div class="form-group"><label for="inputSecondPassword" class="sr-only">SecPassword</label><input type="password" id="inputSecondPassword" class="form-control" name="password_confirm" placeholder="确认密码" required></div><a href="{:url('login/index')}" class="button pull-right" style="margin: 0 0 10px 0;">返回登录</a><div class="form-group"><button class="btn btn-lg btn-primary btn-block" type="submit">注册</button></div></form>

点击发送验证码之后,根据状态码判断是否启动定时器,如果为true则验证码发送成功,定时器启动,如果为false则跳出相关错误信息的弹窗。

function getCode(phone){if(!(/^1[34578]\d{9}$/.test(phone))){alert("手机号码有误,请重填");return ;}$.ajax({type : "post",url : "{:url('getSms')}",data : {'mobile':phone,'type':'forget'},dataType : "json",success:function(result){if(!result.bools){alert(result.msg)}else{showtime(60);
//                    console.log(result.msg);}}})}//显示时间var showtime = function(t){$("#getyzm").attr('disabled',true);for(i=1;i<=t;i++){window.setTimeout(updatetime, i * 1000,i,t);}}//更新时间var updatetime = function(num,t){if(num == t){$("#getyzm").attr('disabled',false);$("#getyzm").text("重新发送");}else{remaintime = t - num;$("#getyzm").text(remaintime + " 秒后重新发送");}

2、后端主要代码

getSms主要进行一些逻辑性的判断和调用。

//发送验证码public function getSms(){if(!request()->isPost()){$this->error('当前请求非法!');}$data = input('post.');if(!isMobile($data['mobile'])){return json(array('bools'=>false,'msg'=>'手机号码不符合格式'));}//判断是否超过验证码有效期if(Session::has('mobile_code','yzm')){if(time() - session('session_start_time','','yzm') < 60*15){return json(array('bools'=>false,'msg'=>'验证码15分钟内有效'));}else{session('mobile_code',null,'yzm');}}//判断是忘记密码还是注册账户if($data['type'] == 'forget'){$result = AdminModel::hasUser($data['mobile']);if($result['flag']){return $this->sendSms($data['mobile']);}else{return json(array('bools'=>false,'msg'=>'该手机号未注册'));}}if($data['type'] == 'register'){$result = AdminModel::hasUser($data['mobile']);if($result['flag']){return json(array('bools'=>false,'msg'=>$result['msg']));}{return $this->sendSms($data['mobile']);}}}

sendSms为发送验证码的核心方法,sendSms的主要代码在聚合数据给的案例里也有,我这里进行了部分修改。将生成验证码的时间也存储到session中,在上面调用的时候可以对验证码的时效进行严格的控制。

//发送验证码public function sendSms($mobile){$code = rand(1000,9999);session('mobile_code',$code,'yzm');session('session_start_time',time(),'yzm');$params = array('key'   => Config::get('juheSMS')['key'], //您申请的APPKEY'mobile'    => $mobile, //接受短信的用户手机号码'tpl_id'    => Config::get('juheSMS')['tpl_id'], //您申请的短信模板ID,根据实际情况修改'tpl_value' =>'#code#='.$code.'&#company#=蛋叔科技' //您设置的模板变量,根据实际情况修改);$paramstring = http_build_query($params);$content = juheCurl(Config::get('juheSMS')['url'], $paramstring, 1);if($content){$result = json_decode($content, true);$error_code = $result['error_code'];if($error_code == 0){//状态为0,说明短信发送成功return json(array('bools'=>true,'msg'=>'短信发送成功,短信ID:'.$result['result']['sid']));}else{//状态非0,说明失败$msg = $result['reason'];return json(array('bools'=>false,'msg'=>'短信发送失败!('.$error_code.'):'.$msg));}}else{return json(array('bools'=>false,'msg'=>'短信已发送,未收到请重试'));}}

ThinkPHP5聚合数据短信验证码接口实现注册/忘记密码功能相关推荐

  1. 聚合数据短信验证码接口实现 Android开发短信验证码

    在说Android中的短信验证码这个知识点前,我们首先来了解下聚合数据 聚合数据介绍 聚合数据是一家国内最大的基础数据API提供商,专业从事互联网数据服务.免费提供从天气查询.空气质量.地图坐标到金融 ...

  2. 使用聚合数据API查询快递数据-短信验证码-企业核名

    有位朋友让我给他新开的网站帮忙做几个小功能,如下: 输入快递公司.快递单号,查询出这个快件的所有动态(从哪里出发,到了哪里) 在注册.登录等场景下的手机验证码(要求有一定的防刷策略) 通过输入公司名的 ...

  3. 使用聚合数据短信API测试(短信验证登录)

    搞一手聚合数据短信API测试(之前用阿里云的搞过,今天我们用聚合) 注册聚合账号!聚合官网链接 登陆后进入短信服务API(免费提供十次) 添加自定义模板(审核速度看脸) 审核成功后得到模板ID 之后得 ...

  4. php短信接口加密_PHP短信接口、PHP短信验证码接口源码

    PHP短信接口.PHP短信验证码接口源码 时间:2016-06-13 11:53 来源:原创 作者:admin PHP短信接口文档源码,PHP发短信接口,PHP在线发短信,PHP微信发短信接口 /* ...

  5. 如何防止恶意攻击短信验证码接口

    如何防止恶意攻击短信验证码接口 1 自研技术 2 自研验证码被破解怎么办? 3 所有图形验证码都被破解怎么办? 1 自研技术 1.手机号码限制:限制单个手机号码每天的最大发送次数.超过次数不能发送短信 ...

  6. 手机短信验证码接口在各领域的应用

    很多网站.APP应用.内部管理软件在使用过程中,都需要会员进行手机号码验证.登录验证.操作验证,在各种验证形式中,手机短信验证的方式最为简单和方便.根据不同的应用领域,手机短信验证可以广泛应用在如下方 ...

  7. 如何防止短信验证码接口、登录注册入口被恶意调用攻击?

    目录 前言 1.短信验证码是什么? 2.为什么要对短信验证码进行防护? 3.有哪些常见的防护手段? 4.这些防护手段有没有用呢,到底该如何选择? 5.结语 前言 最近遇到一个关于防止短信验证码被刷的问 ...

  8. 短信验证码接口的应用场景和优势

    短信验证码接口是常用于网络平台的一种短信功能接口,它在用户注册登录.密码找回.账户变更.确认支付.活动认证等场景都会应用到,短信接口作为网络平台与用户之间重要交互手段,凭借其速度快.到达率高.安全性好 ...

  9. java防止注册刷短信攻击_java面试(1)如何防止恶意攻击短信验证码接口

    防止恶意攻击短信验证码接口方法 1.手机号码限制:限制单个手机号码每天的最大发送次数.超过次数不能发送短信,可以考虑将手机号码加入黑名单,禁止1天. 2.短信发送时间间隔限制:限制同一个手机号码重复发 ...

最新文章

  1. 方舟服务器维护公告11月19日,明日方舟11月19日10点停机维护 更新内容一览
  2. 2017 实习面试问题总结(阿里、头条、美团、cvte、乐视、华为)
  3. python简单命令语句_python基础教程之[基础学习]MySQL常用语句命令总结|python基础教程|python入门|python教程...
  4. 【内外网映射】通过外网ip来访问虚拟机服务器【转载】
  5. 指纹和人脸识别 AI 总结
  6. WIFI状态下SecoClient链接故障
  7. xvidcore.dll not found视频播放问题
  8. java 枚举 命名规范_JAVA命名规范
  9. HTML网页设计结课作业~仿小米商城网站纯HTML模板源码(HTML+CSS)
  10. PR短视频转场预设 60个摇晃抖动效果过渡合集
  11. 站长必备:在线设计生成LOGO
  12. 用python画多来a梦-Python—turtle画图(哆啦A梦)
  13. 机器学习预测时label错位对未来数据做预测
  14. Gnuplot 常用命令
  15. 计算机操作系统教程 2 操作系统概述
  16. 网站被黑后处理方法及删除批量恶意代码的方法步骤
  17. 使用navicat连接远程linux mysql数据库出现10061
  18. 12.匹配一次或多次出现的字符
  19. MySQL数据盘空间满了
  20. 【谷歌浏览器升级之后,导致在谷歌浏览器上面无法正常访问政务网的解决办法】

热门文章

  1. 无法弹出usb设备、文件正在被占用
  2. 【Project】Cool Gamepad 游戏手柄
  3. 【文档神器typora】typora图云picgo + gitee
  4. phtoshop CEP扩展 读取xls文件内容
  5. Java技术类校招面试题汇总:用java实现发送手机验证码
  6. uni-app 实现 fullpage 组件(适用于微信小程序,h5等)
  7. Tableau可视化技巧-在数据上添加方向图标的两种方法
  8. Android用代码模拟系统物理按键长按操作(类似按键精灵)
  9. 微软必应地图加载错误:Uncaught TypeError: Microsoft.Maps.Location is not a constructor
  10. MAC OS绕过开机密码