手机短信验证码登录功能的开发实录(机器识别码、短信限流、错误提示、发送验证码倒计时60秒)

这篇具有很好参考价值的文章主要介绍了手机短信验证码登录功能的开发实录(机器识别码、短信限流、错误提示、发送验证码倒计时60秒)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

手机短信验证码登录功能的开发实录(机器识别码、短信限流、错误提示、发送验证码倒计时60秒)
短信验证码是通过发送验证码到手机的一种有效的验证码系统,作为比较准确和安全地保证购物的安全性,验证用户的正确性的一种手段,几乎网站登录都会使用该方式。
其特点是依据某些验证码接入商提供手机短信验证码服务,各网站通过接口发送请求到接入商的服务器,服务器发送随机数字或字母到手机中,由接入商的服务器统一做验证码的验证。

项目分析

  1. 开通阿里云、腾讯云等短信API端口;
  2. 为防止机器批量发送验证码,设置机器识别码,设置5分钟内发送的次数,进而予以限流;
  3. 发送信息错误时,进行明确的信息提示;
  4. 完成信息验证,执行业务正常逻辑;

核心代码

1.外部js库调用

    <script type="text/javascript" src="static/js/jquery.min.js"></script>
    <!--layui封装库-->
    <script src="static/layui/layui.js" charset="utf-8"></script>
    <link rel="stylesheet" href="static/layui/css/layui.css">

2.HTML容器构建

<div style="margin-top: 10px;padding: 20px;">
    <form class="layui-form layui-form-pane">
        <div class="layui-form-item">
            <label for="L_user_phone" class="layui-form-label">手机号码</label>
            <div class="layui-input-inline"><input type="text" id="L_user_phone" name="user_phone" class="layui-input" lay-verify="user_phone"></div>
            <div class="layui-form-mid layui-word-aux"><span class="x-red">* 手机号码,作为登录账户唯一凭证,如:13500000001。</span></div>
        </div>

        <div class="layui-form-item">
            <label class="layui-form-label">识别码</label>
            <div class="layui-input-inline"><input type="text" name="captcha" id="captcha" lay-verify="required" autocomplete="off" class="layui-input"></div>
            <div class="layui-form-mid layui-word-aux"> <img src="?m=Login&a=loginDeal&act=getCode" id="getCode" alt="" title="点击刷新验证码" style="cursor: pointer;"><span class="x-red"> * </span> 发送手机短信验证</div>
        </div>

        <div class="layui-form-item">
            <label class="layui-form-label">短信验证码</label>
            <div class="layui-input-inline"><input type="text" name="smscode" id="smscode" lay-verify="smscode" autocomplete="off" class="layui-input" disabled="disabled"></div>
            <div class="layui-input-inline">
                <input type="button" class="layui-btn layui-btn-primary" id="btnSendCode" disabled="disabled" value="获取验证码">
            </div>
        </div>

        <div class="layui-form-item">
            <button class="layui-btn layui-btn-fluid layui-btn-normal" lay-filter="save" id="L_add" lay-submit=""> 确认登录 </button>
        </div>
    </form>
</div>

3.javaScript业务逻辑验证

  • 验证手机号和短信验证码规则
        //自定义验证规则
        form.verify({
            user_phone: [/^1[3|4|5|6|7|8|9]\d{9}$/, '手机必须11位,只能是数字!']
            , smscode: [/[\S]+/, "验证码为6位数且5分钟内有效"]
        });

  • 机器识别码验证

获取实际图片识别码

    $("#getCode").click(function () {
            $(this).attr("src", '?m=Login&a=loginDeal&act=getCode&' + Math.random());
        });

  • 发送短信验证码倒计时60秒
        var wait = 60;

        function time(o) {
            if (wait == 0) {
                o.removeAttribute("disabled");
                o.value = "获取验证码";
                wait = 60;
            } else {
                o.setAttribute("disabled", true);
                o.value = "重新发送(" + wait + ")";
                wait--;
                setTimeout(function () {
                    time(o);
                }, 1000);
            }
        }
  • 获取识别码和验证码的业务逻辑
 //单击发送验证码;
                document.getElementById("btnSendCode").onclick = function () {
                    var captcha = $("#captcha").val();
                    //获取识别码;
                    $.getJSON("?m=Login&a=loginDeal&act=captcha", {mobile: mobile, captcha: captcha}, function (res) {
                        if (res.code == '0') {
                            layer.msg(res.msg, {icon: 1, time: 2000});
                        } else {
                            if (wait != 60) {
                                layer.alert("请" + wait + "秒后再试!", {icon: 3, time: 2000})
                                return;
                            }
                            time(document.getElementById("btnSendCode"));
                            $.getJSON("?m=Sms&a=smsDeal&act=verify", {
                                mobile: mobile,
                                captcha: captcha
                            }, function (res2) {
                                //console.log(res2.send.Code);
                                if (res2.send.Code != "OK") {
                                    layer.alert("短信限流,请等待5分钟", {icon: 3, time: 2000})
                                }
                            });
                        }
                    });
                }

针对不同平台的业务逻辑,对返回的短信参数进行输出,提示用户操作。

 if (res2.send.Code != "OK") {
   layer.alert("短信限流,请等待5分钟", {icon: 3, time: 2000})
 }
  • 执行业务正常逻辑
 //监听提交;
        form.on('submit(save)', function () {
            $.ajax({
                type: "post",
                url: "?m=Login&a=loginDeal&act=smsCode",
                async: true,
                data: {
                    user_phone: $('#L_user_phone').val(),
                    smscode: $('#smscode').val()
                },
                dataType: "json",
                success: function (res) {
                    //console.log(res);
                    if (res.code == 0) {
                        layer.msg(res.msg, {icon: 1, time: 2000});
                    } else {
                        layer.msg(res.msg, {icon: 1, time: 2000}, function () {
                            var index = parent.layer.getFrameIndex(window.name);
                            parent.layer.close(index);
                            window.parent.location.href = "?m=Index&a=my";
                        });
                    }
                },
                error: function (err) {
                    console.log(err);
                }
            });
            return false;
        });

4.后端验证逻辑

  • 生成随机机器识别码
    case "getCode";
        require_once "libs/vcode.class.php";
        $obj = new vcode();//实例化;
        $_SESSION['authcode'] = $obj->authcode;
        die($obj->output());
        break;

  • 验证机器识别码
  //网站识别码;
    case "captcha";
        $user_phone = get_param('mobile');
        $captcha = isset($_GET["captcha"]) ? trim($_GET["captcha"]) : '';

        if ($captcha != $_SESSION['authcode']) {
            $res['code'] = "0";
            $res['msg'] = "识别码错误";
            die(json_encode_lockdata($res));
        } else {
            $res['code'] = "1";
            $res['msg'] = "识别码通过";
            //验证码自动销毁;
            session_destroy();
            die(json_encode_lockdata($res));
        }
        break;
  • 发送短信流(次数)判断
 case "verify";
        require "libs/api_demo/SmsDemo.php";/*阿里云短信SDK*/
        $rmdCode = rand(111111, 999999);//随机验证码
        $templateCode = 'SMS_165690909';//调用模版
        $signName = '言医';//签名
        $mobile = get_param('mobile');//手机号
        if ($mobile == "") {
            die("越权访问!");
        }

        //增加记录;
        addlogs($mobile, 'smscode', '', time(), getip());

        //读取数据库记录;
        $fromTime = time() - 300;
        $toTime = time();
        $sql = "select log_id FROM " . $db->table('log') . " WHERE 1";
        $sql .= " AND logs = 'smscode' AND log_ip ='" . getip() . "'";
        $sql .= " AND log_time > " . $fromTime . " AND log_time <" . $toTime . "";
        $sql .= " ORDER BY log_id DESC";
        $row = $db->queryall($sql);
        if (count($row) >= 5) {
            $res['code'] = 0;
            $res['msg'] = '5分钟内最多发送5次短信.';
            $res['total'] = count($row);
            die(json_encode_lockdata($res));
        } else {
            $send = SmsDemo::sendSms($mobile, $signName, $templateCode, $rmdCode, '', '', '', '', 1);
            $res['code'] = 1;
            $res['send'] = $send;
            $_SESSION['code'] = $rmdCode;
            die(json_encode_lockdata($res));
        }
        break;

总结

一个简单的手机短信验证码登录,涉及到的方方面面比较多。在发送短信次数的限制上,本系统作为正常的业务逻辑进行判断和限流,同时对于阿里云和腾讯云也有对应的限制规则,需要在平台上进行设置。

@漏刻有时文章来源地址https://www.toymoban.com/news/detail-430837.html

到了这里,关于手机短信验证码登录功能的开发实录(机器识别码、短信限流、错误提示、发送验证码倒计时60秒)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【利用宝塔WebHook插件、SmsForwarder(短信转发器)、quicker实现电脑端自动输入手机短信验证码登录】

    最近公司各种系统有一些小改动,闲置几分钟就得重新登录,然后每次登录得:打开手机→查看验证码短信→在电脑上手动输入,实在是太影响 效率 (心情)。为了更好地 搬砖 (摸鱼),利用一些小工具实现了手机验证码转发并自动输入。 服务器设定weebhook——手机验证码

    2024年03月27日
    浏览(41)
  • 使用redis实现手机短信验证码和lua完成重置功能

    2024了,各种各样的门户网站和APP都需要登录,登录方式也各种各样,由于都要绑定用户手机号码,所以大部分都支持了手机验证码登录的方式,接下来我们使用redis来完成验证码的功能。 方法名 描述 get 获取验证码 match 验证码配对 reset 验证码重置 check 手机号检测 sendVerificationCode

    2024年02月19日
    浏览(28)
  • 【SpringBoot+MP】阿里云短信测试服务操作流程、用户手机验证码登录实现

    前面是站在后台员工的角度,现在站在消费者的角度,当客户从移动端选择通过验证码登录APP,需要调用云服务器的短信功能(厂商短信服务API) ,后端要做的就是生成验证码并发送,并针对请求中客户收到的验证码与后端发送的进行比对,确保一致后成功登录。 首先针对

    2024年02月02日
    浏览(28)
  • 前端实现手机短信验证码倒计时效果

    实现效果:实现按钮倒计时10s后可重新发送验证码 一、思路 1、禁用按钮,调用后端接口,获取验证码 2、setTimeOut(() = {},1000)延迟1s执行,time - 1,返回文案,9s 3、迭代处理,调用自身函数,time - 1,返回文案,8s,实现9s 8s 7s 这样倒计时的效果。 4、不能无限迭代减1,判断时

    2024年02月04日
    浏览(39)
  • 使用自动化测试获取手机短信验证码

    目前在职测试开发,,写一些脚本,个人认为这职业不科学不应该有的职业,测试就是测试,开发就是开发,运维还是老鸟,这行业总能折腾些莫名其妙的东西出来,刚做这行时学的第一门语言是bash shell, 去新去单位上班直接写了个一键搭建测试环境的测试脚本,本来不想干测试了,好好做

    2024年01月21日
    浏览(29)
  • 引入短信服务发送手机验证码进行安全校验

    其他方案=引入QQ邮箱发送验证码进行安全校验 相对短信验证码,操作更简单而且免费 最近想给自己的项目在注册时加点安全校验,准备使用免费的邮箱验证来着,在上一篇引入QQ邮箱进行安全校验时,看有朋友说阿里云会送一些短信服务免费额度,于是去官网一看,果然送了

    2024年02月04日
    浏览(40)
  • chatgpt赋能python:Python如何获取手机短信验证码

    在现代社会里,验证码已经成为了各种网站、APP、银行等机构对用户身份认证的必备手段。从有用性角度考虑,我们需要确保验证码的真实有效性,从而保护用户信息的安全。而为了方便用户接收验证码,手机短信成为一种比较受欢迎的验证码发送工具。 但是,一旦手机接收

    2024年02月11日
    浏览(32)
  • 珍藏5个在线免费接收国内外手机短信验证码的网络服务

            一直以来手机号码都是在线服务用来验证登录身份的主要方式,某些时候我们并不希望被知道真实身份,就可以使用一些方法绕过验证,手机方面也有临时手机号码可以使用,就能够在不被得知真实数据的情况下完成注册或通过身份认证等程序。 手机号码牵涉的

    2024年02月08日
    浏览(37)
  • 腾讯云短信服务实现 Java 发送手机验证码(SpringBoot+Redis 实现)

    前置:需要腾讯云的账号,后期授权需要,不需要买云服务器,有需要的可以购买短信套餐(几块钱) 搜索框输入短信,可以买一个短信套餐包,便宜不贵,进入短信服务的控制台 发送短信有频率限制,企业用户可以修改设置 之后我们需要对短信内容进行设置      类型有网站

    2024年02月09日
    浏览(34)
  • html调用手机打电话、发短信功能

    在html头部里面加上: meta name=\\\"format-detection\\\" content=\\\"telephone=yes\\\"/ 在需要拨打电话的地方: lable13366668888/label ahref=\\\"tel:13366668888\\\" 打电话 当点击页面上电话号码的时候 ,这个时候页面会跳转到手机打电话的界面,并把号码附在上面,点击即可拨通。 如需要发短信: lable1336666888

    2024年02月11日
    浏览(31)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包