登录注册----3.2手机验证码

前言

通过手机验证码登录和注册是目前最流行的一种方式。这篇文章就来介绍如何实现手机验证码的发送与验证。
我们先来分析一下大概流程。

  1. 前端页面的发送验证码以及倒计时显示
  2. 在数据库新建一个存放手机号和手机验证码的数据表
  3. 在网上找个可用的短信接口(网易,阿里,腾讯都有接口)我这里使用的是容联云通讯
  4. 在控制器中创建发送短信验证码的方法
  5. 在控制器中创建验证短信验证码的方法
  6. 新建路由用于发送验证码
1.前端页面的发送验证码以及倒计时显示

这里可以分为2块分别是

  • 可发送验证码时显示的效果(发送验证码,重新发送)
  • 倒计时效果(不可发送)

部分代码如下

//改变计时文字的颜色
            $(this).removeClass('bk_important');
            $(this).addClass('bk_summary');
            enable = false;//一旦点击将其置为false
            var time = 60;//允许多长时间后重新发送
            var interval = window.setInterval(function () { //定义一个计时器
                $('.bk_phone_code_send').html(--time+'s 重新发送'); //改变按钮的状态,并改变上面的文字
                if (time == 0){//当计时器为0时可重新发送
                    $('.bk_phone_code_send').addClass('bk_important');
                    $('.bk_phone_code_send').removeClass('bk_summary');
                    enable = true;
                    window.clearInterval(interval);
                    $('.bk_phone_code_send').html('重新发送');
                }
            },1000);
2.在数据库新建一个存放手机号和手机验证码的数据表

这里表中所包含的数据项为

  • id(主键)
  • phone(手机号)
  • code(验证码)
  • deadline(验证码持续的时间)

具体如下图所示,由于之前的数据表的数据项会导致错误,大家可按照此图对数据库重新更改

Paste_Image.png
3.在网上找一个可用的短信接口(这里使用的是容联云通讯)

首先在app\Tool\下新建SMS文件夹用于存放接口文件
这个大家可以把我存放在github下的代码拿下来用就行了
然后要在容联的官网注册一个账号
然后登录,查找如图所示方框里的内容

Paste_Image.png

最后将如图所示的数据替换成你账号的数据即可

Paste_Image.png

然后在控制台输入你要测试的号码

Paste_Image.png
4.在控制器中创建发送短信验证码的方法

这个方法我们是写在app\Http\Controllers\Service\ValidateCodeController.php文件下
此方法代码如下

public function sendSMS(Request $request)
    {
        $m3_result = new M3Result();

        $phone = $request->input('phone','');//获取输入框的手机号
        $sendTemplateSMS = new SendTemplateSMS();
        //生成6位随机验证码
        $charset='1234567890';//数据源
        $code = '';//声明
        //生成随机码的算法逻辑
        $_len = strlen($charset) - 1;
        for ($i = 0;$i < 6;++$i) {
            $code .= $charset[mt_rand(0, $_len)];
        }
        //测试的时候需要自己注册账号,并且更改模板里的一些文件
        //参数说明  要发送的手机号 (验证码,验证码存在的事件) 短信模板 1为测试模板 手机验证码最好为6位数字
        $m3_result =$sendTemplateSMS->sendTemplateSMS( $phone,array($code,60),1);
        if ($m3_result->status == 0){
            //将数据保存到数据表中
            $tempPhone = TempPhone::where('phone_number',$phone)->first();
            if($tempPhone == null){ //判断手机号是否已被注册
                $tempPhone = new TempPhone();
            }

            $tempPhone->phone_number = $phone;
            $tempPhone->code = $code;
            $tempPhone->deadline =date('Y-m-d H-i-s',time()+60*60);
            $tempPhone->save();

        }
        return $m3_result->toJson();
    }
5.在控制器中创建验证短信验证码的方法

这个方法我们是写在app\Http\Controllers\Service\MemberController.php文件下
此方法中验证‘验证码’代码如下

 //查询手机号
        //参数1 要查询的字段名称  第二个参数 不写的话默认为= 如果要判断大小需要将其添加上 第三个是传进来的值
        $tempPhone = TempPhone::where('phone_number','=',$phone)->first();
        //判断验证码处理逻辑
        //判断数据库中的验证码是否和输入的一致
        if($tempPhone->code == $phone_code){
            //如果一致再进行验证码是否过期判断
            if(time() > strtotime($tempPhone->deadline)){ //strtotime将时间字符串转换为时间戳
                $m3_result->status = 7;
                $m3_result->message = '手机验证码不正确';
                return $m3_result->toJson();
            }
            //验证格式验证正确后 处理逻辑
            $member = new Member();
            $member->phone = $phone;//传手机号
            $member->password = md5('bk'+$password);//传密码  md5加密
            $member->save();//将数据存到数据表中

            $m3_result->status = 0;
            $m3_result->message = '注册成功';
            return $m3_result->toJson();

        }
6. 新建路由用于发送验证码

在路由中我们需要新建两个路由

  • 用于发送验证码的路由
  • 注册或登录时数据验证的路由

代码如下

Route::group(['prefix' => 'service'], function () {
/*    Route::get('users', function ()    {
        // 匹配 "/admin/users" URL
    });*/
    Route::get('validatecode/', 'Service\ValidateCodeController@create');
    Route::post('validate_phone/send', 'Service\ValidateCodeController@sendSMS');
    Route::post('register', 'Service\MemberController@register');
    Route::post('login', 'Service\MemberController@login');
    Route::post('validate_email', 'Service\ValidateCodeController@validateEmail');
});

注:在测试的时候出现很多问题,大部分都是小细节问题,而且非常不好找。有一次一个多打一个空格让我找了半天。。。重新审视了好几遍,都没发现错误。
这里我提醒大家要注意细节问题,比如多打空格、拼写错误、和数据表中的数据项名不一致。等等
还有就是发生什么错误就要对应的去找,不要像我一样重新看几遍~~~~
浪费了大量时间,自己都想放弃了。但是一旦改过来,精神会突然一震。
让你感受到成就感。我是初学者所以是这样的。。。
此文比较简略,主要是为了自己以后翻阅记录而作。
在此建议大家在淘宝淘点教学视频或者上慕课网跟着老师进行实战

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,744评论 6 502
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,505评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,105评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,242评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,269评论 6 389
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,215评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,096评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,939评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,354评论 1 311
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,573评论 2 333
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,745评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,448评论 5 344
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,048评论 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,683评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,838评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,776评论 2 369
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,652评论 2 354

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 172,082评论 25 707
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,652评论 18 139
  • 从三月份找实习到现在,面了一些公司,挂了不少,但最终还是拿到小米、百度、阿里、京东、新浪、CVTE、乐视家的研发岗...
    时芥蓝阅读 42,241评论 11 349
  • 今天是5月17日,天有点阴冷,不过感冒还是罪魁祸首难受ing今天我撕开最爱的芝士条零食时候,很是纠结。为什么锯齿往...
    福尔摩洋阅读 339评论 0 0
  • 今儿个冬至。冬至10天阳历年,接下来就是元旦。新的一年裹着寒风,已经迎面而来了。 上半年单位发给的体检卡,因为总是...
    西泰阅读 260评论 0 2