热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

微信小程序+laravel7+Redis+短信宝实现手机号验证码登录

以下代码可以进行优化和封装;这里我实现功能为主,就不封装啦。小伙伴可以自己试着封装一下。1:书写登录表单<viewclass"container&a

 以下代码可以进行优化和封装;这里我实现功能为主,就不封装啦。小伙伴可以自己试着封装一下。 

1:书写登录表单

class="container">
    class="title">登录
    "login">
        class="inputView">
            class="inputText" placeholder="请输入手机号" name="phone" bindblur="phone" />
        
        class="inputView">
            class="inputText" placeholder="请输入验证码" name="code" />
            
        
        class="loginBtnView">
            
        
    

 

 2:js

// pages/phone_login/phone_login.js
Page({

    /**
     * 页面的初始数据
     */
    data: {
        // 定义手机号
        phone: '',
        // 发送验证码倒计时
        codebtn: '发送验证码',
        // 是否禁用的按钮
        disabled: false,
    },
    /**
     * 失焦事件验证手机号
     */
    phone(e) {
        let phone = e.detail.value;
        let reg = /^[1][3,4,5,7,8][0-9]{9}$/;
        if (!reg.test(phone)) {
            wx.showToast({
                title: '手机号码格式不正确',
                icon: "none",
                duration: 2000
            })
            return false;
        }
        this.setData({
            phone: e.detail.value
        })
    },
    /**
     *  发送验证码
     */
    sendcode() {
        let that = this;
        let phone = this.data.phone;
        if (phOne== '') {
            wx.showToast({
                title: '手机号码不可以为空',
                icon: "none",
                duration: 2000
            })
        }
        //发送手机号获取验证码
        wx.request({
            url: 'http://www.yan.com/mouth/login', //仅为示例,并非真实的接口地址
            data: {
                phone
            },
            header: {
                'content-type': 'application/json' // 默认值
            },
            success: res => {
                if (res.data.code == 200) {
                    wx.showToast({
                        title: '验证码已发送.请注意接收',
                        icon: "success"
                    })
                    let time = 60;
                    var times = setInterval(function () {
                        time--;
                        if (time > 0) {
                            that.setData({
                                codebtn: time,
                                disabled: true
                            });
                        } else {
                            that.setData({
                                codebtn: '发送验证码',
                                disabled: false
                            });
                            clearInterval(times)
                        }
                    }, 1000)
                }else{
                    wx.showToast({
                        title: res.data.msg,
                        icon:"none",
                        duration:2000
                      })
                }
            }
        })
    },
    /**
     * 获取到验证码和手机号进行登录
     */
    login(evt) {
        var that = this;
        let phone = evt.detail.value.phone;
        let code = evt.detail.value.code;

        if (phOne== "") {
            wx.showToast({
                title: '请填写手机号码',
                icon: 'none',
                duration: 2000
            })
            return false;
        }
        if (code == "" || isNaN(code) || code.length != 4) {
            wx.showToast({
                title: '验证码格式不正确',
                icon: 'none',
                duration: 2000
            })
            return false;
        } else {
            wx.request({
                url: 'http://www.yan.com/mouth/code', //仅为示例,并非真实的接口地址
                data: {
                    phone,
                    code
                },
                header: {
                    'content-type': 'application/json' // 默认值
                },
                success(res) {
                // 提示登录成功
                        wx.showToast({
                            title: res.data.meg,
                            icon: 'none',
                            duration: 2000
                        })
              
                }
            })

        }

    }
})

 

3:laravel7 路由

Route::group(['namespace' => 'mouth'], function () {
//登录展示
    Route::get('mouth/login','PhoneLoginController@getPhone');
//验证码
    Route::get('mouth/code','PhoneLoginController@phoneLogin');
});

 

4:控制器代码

php

namespace App\Http\Controllers\mouth;

use App\Http\Controllers\Controller;
use App\Models\Admin;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Redis;

class PhoneLoginController extends Controller
{
    /**
     * 接受手机号,发送验证码
     */
    public function getPhone(Request $request)
    {
//        接受手机号
        $sendPhOne= $request->get('phone');
//        用手机号查询用户信息是否有这个手机号, 没有就去进行注册,有就继续发送验证码
        $test_phOne= Admin::where('phone', $sendPhone)->first();
        if ($test_phOne== false) {
            return ['code' => 500, 'meg' => '数据库没有这个手机号', 'data' => ''];
        }
        if (!preg_match('/^1[3-9]\d{9}$/', $sendPhone)) {
            return ['code' => 1001, 'msg' => '手机号不符合规则', 'data' => ''];
        }
        //判断 是否重复发送
        $redisPhOne=Redis::get($sendPhone);
        if ($redisPhone){
            return ['code' => 1002, 'msg' => '手机号发送太过于频繁', 'data' => ''];
        }
        $statusStr = array(
            "0" => "短信发送成功",
            "-1" => "参数不全",
            "-2" => "服务器空间不支持,请确认支持curl或者fsocket,联系您的空间商解决或者更换空间!",
            "30" => "密码错误",
            "40" => "账号不存在",
            "41" => "余额不足",
            "42" => "帐户已过期",
            "43" => "IP地址限制",
            "50" => "内容含有敏感词"
        );
//        手机号发送验证码
        $smsapi = "http://api.smsbao.com/";
        $user = "**********"; //短信平台帐号
        $pass = md5("*********"); //短信平台密码
        $code = rand('1000', '9999');
        $content = "【百味园】您的验证码是$code,30秒内有效.若非本人操作请忽略此消息。";//要发送的短信内容
        $phOne= $sendPhone;//要发送短信的手机号码
        $sendurl = $smsapi . "sms?u=" . $user . "&p=" . $pass . "&m=" . $phone . "&c=" . urlencode($content);
        $result = file_get_contents($sendurl);
//        将验证码储在缓冲,设置过期时间为一分钟
        Redis::setex($sendPhone,600,$code);
        return ['code' => 200, 'meg' => $statusStr[$result], 'data' => ''];
    }
//    验证手机号发送的验证码
    public function phoneLogin(Request $request)
    {
        $login=$request->input();
//        接受验证码
        $test_code=$login['code'];
//        取出储的验证码,键为接受到的手机好
        $redisCode=Redis::get($login['phone']);
//        进行对比
        if ($test_code!=$redisCode){
//返回前台
            return ['code' => 500, 'meg' => '验证码错误', 'data' => ''];
        }
//        验证成功,返回前台
        return ['code' => 200, 'meg' => '登录成功', 'data' => ''];
    }
}

 

博客参考:

https://blog.csdn.net/jweicao/article/details/117334550

https://www.cnblogs.com/xiaoyantongxue/p/15586772.html

效果图:

 


推荐阅读
  • 拥抱Android Design Support Library新变化(导航视图、悬浮ActionBar)
    转载请注明明桑AndroidAndroid5.0Loollipop作为Android最重要的版本之一,为我们带来了全新的界面风格和设计语言。看起来很受欢迎࿰ ... [详细]
  • 小程序获取用户信息按钮返回中文地址
    1.我是根据官方文档中描述去写的按钮 可以看到button中加了zh_CNopen-typegetUserInfobindgetuserinfogetU ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • 本文介绍了Redis的基础数据结构string的应用场景,并以面试的形式进行问答讲解,帮助读者更好地理解和应用Redis。同时,描述了一位面试者的心理状态和面试官的行为。 ... [详细]
  • Voicewo在线语音识别转换jQuery插件的特点和示例
    本文介绍了一款名为Voicewo的在线语音识别转换jQuery插件,该插件具有快速、架构、风格、扩展和兼容等特点,适合在互联网应用中使用。同时还提供了一个快速示例供开发人员参考。 ... [详细]
  • 本文介绍了作者在开发过程中遇到的问题,即播放框架内容安全策略设置不起作用的错误。作者通过使用编译时依赖注入的方式解决了这个问题,并分享了解决方案。文章详细描述了问题的出现情况、错误输出内容以及解决方案的具体步骤。如果你也遇到了类似的问题,本文可能对你有一定的参考价值。 ... [详细]
  • iOS Swift中如何实现自动登录?
    本文介绍了在iOS Swift中如何实现自动登录的方法,包括使用故事板、SWRevealViewController等技术,以及解决用户注销后重新登录自动跳转到主页的问题。 ... [详细]
  • 小程序自动授权和手动接入的方式及操作步骤
    本文介绍了小程序支持的两种接入方式:自动授权和手动接入,并详细说明了它们的操作步骤。同时还介绍了如何在两种方式之间切换,以及手动接入后如何下载代码包和提交审核。 ... [详细]
  • JavaScript和HTML之间的交互是经由过程事宜完成的。事宜:文档或浏览器窗口中发作的一些特定的交互霎时。能够运用侦听器(或处置惩罚递次来预订事宜),以便事宜发作时实行相应的 ... [详细]
  • 使用圣杯布局模式实现网站首页的内容布局
    本文介绍了使用圣杯布局模式实现网站首页的内容布局的方法,包括HTML部分代码和实例。同时还提供了公司新闻、最新产品、关于我们、联系我们等页面的布局示例。商品展示区包括了车里子和农家生态土鸡蛋等产品的价格信息。 ... [详细]
  • JS实现一键分享功能
    本文介绍了如何使用JS实现一键分享功能,并提供了2019独角兽企业招聘Python工程师的标准。同时,给出了分享到QQ空间、新浪微博和人人网的链接。 ... [详细]
  • REVERT权限切换的操作步骤和注意事项
    本文介绍了在SQL Server中进行REVERT权限切换的操作步骤和注意事项。首先登录到SQL Server,其中包括一个具有很小权限的普通用户和一个系统管理员角色中的成员。然后通过添加Windows登录到SQL Server,并将其添加到AdventureWorks数据库中的用户列表中。最后通过REVERT命令切换权限。在操作过程中需要注意的是,确保登录名和数据库名的正确性,并遵循安全措施,以防止权限泄露和数据损坏。 ... [详细]
  • Android源码中的Builder模式及其作用
    本文主要解释了什么是Builder模式以及其作用,并结合Android源码来分析Builder模式的实现。Builder模式是将产品的设计、表示和构建进行分离,通过引入建造者角色,简化了构建复杂产品的流程,并且使得产品的构建可以灵活适应变化。使用Builder模式可以解决开发者需要关注产品表示和构建步骤的问题,并且当构建流程发生变化时,无需修改代码即可适配新的构建流程。 ... [详细]
  • 微信小程序导航跟随的实现方法
    本文介绍了在微信小程序中实现导航跟随的方法。通过设置导航的position属性和绑定滚动事件,可以实现页面向下滚动到导航位置时,导航固定在页面最上方;页面向上滚动到导航位置时,导航恢复到原始位置;点击导航可以平滑跳转到相应位置。代码示例也给出了具体实现方法。 ... [详细]
  • 本文整理了Java中java.lang.NoSuchMethodError.getMessage()方法的一些代码示例,展示了NoSuchMethodErr ... [详细]
author-avatar
我是小储哥
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有