vue实现短信验证码登录功能(流程详解)


Posted in Javascript onDecember 10, 2019

无论是移动端还是pc端登录或者注册界面都会见到手机验证码登录这个功能,输入手机号,得到验证码,最后先服务器发送请求,保存登录的信息,一个必不可少的功能

思路

1,先判断手机号和验证是否为空,

2,点击发送验证码,得到验证码

3,输入的验证码是否为空和是否正确,

4,最后向服务发送请求

vue实现短信验证码登录功能(流程详解)vue实现短信验证码登录功能(流程详解)

界面展示

1.准备工作

这个会对input进行封装处理

<template>
 <div class="text_group">
  <div class="input_group" :class="{'is-invalid': error}">
   <!-- 输入框 -->
   <input 
    :type="type"
    :placeholder="placeholder"
    :value="value"
    :name="name"
    @input="$emit('input',$event.target.value)"
   >
   <!-- 输入框后面的内容 -->
   <button v-if="btnTitle" @click="$emit('btnClick')" :disabled="disabled">{{btnTitle}}</button>
  </div>
  <!-- 验证提示 -->
  <div v-if="error" class="invalid-feedback">{{error}}</div>
 </div>
</template>
<script>
 export default {
  name:"inputGroup",
  props:{
   type: {
    type: String,
    default: "text"
   },
   placeholder:String,
   value:String,
   name:String,
   disabled:Boolean,
   btnTitle:String, //input框中的文字
   error:String //验证不正确提示
  }
 }
</script>

input组件封装完之后在我们这个login组件中引入并注册

import InputGroup from '../components/InputGroup'引入封装的组件

最后在components注册

data() {
 return {
  phone:"", //手机号
  verifyCode:"", //验证码
  btnTitle:"获取验证码",
  disabled:false, //是否可点击
  errors:{}, //验证提示信息
 }
 }

<template>
 <div class="login">
  <!-- 手机号 -->
  <InputGroup
   type="number"
   placeholder="手机号"
   v-model="phone" 
   :btnTitle="btnTitle"
   :disabled="disabled"
   :error="errors.phone"
   @btnClick="getVerifyCode"
  />
  <!-- 输入验证码 -->
  <InputGroup
   type="number"
   v-model="verifyCode"
   placeholder="验证码"
   :error="errors.code"
  />
  <!-- 登录按钮 -->
 



 <div class="login_btn">
   <button @click="handleLogin" :disabled="isClick">登录</button>
  </div>
 </div>
 </template>

2.判断手机号是否正确和合法

(1)点击验证码发送验证的时候,必须符合手机号正确和手机号码不能为空,短信发送服务用的是《聚合数据》,申请可以免费调用10次

getVerifyCode(){

//获取验证码
if(this.validatePhone()) {
 this.validateBtn()
 //发送网络请求
 this.$axios.post('/api/posts/sms_send',{<br>


//注册聚合数据找到短信api服务,申请会得到两个tpl_id和key值,然后填入相对应的就行,具体还是和你门后端进行沟通
  tpl_id: "",
    key: "",
  phone:this.phone
 }).then(res => {
  console.log(res)
 })
 }<br>},

2.1点击发送验证码的时候判断是否合法

validatePhone(){
 //判断输入的手机号是否合法
 if(!this.phone) {
 this.errors = {
 phone:"手机号码不能为空"
 }
 // return false
 } else if(!/^1[345678]\d{9}$/.test(this.phone)) {
 this.errors = {
 phone:"请输入正确是手机号"
 }
 // return false
 } else {
 this.errors ={}
 return true
 }
},

2.2点击验证码发送倒计时

validateBtn(){
 //倒计时
 let time = 60;
 let timer = setInterval(() => {
 if(time == 0) {
 clearInterval(timer);
 this.disabled = false;
 this.btnTitle = "获取验证码";
 } else {
 this.btnTitle =time + '秒后重试';
 this.disabled = true;
 time--
 }
 },1000)
},

3.点击登录实现

3.1点击登录之前手机已经发送验证密,并且手机上以及获取到正确的验证码,登录之前需要判断,手机号和验证码都不能为空,所以在计算属性判断是否两个都为空,如果都不为空的话,可以点击按钮,否则不能点击按钮

computed: {
 //手机号和验证码都不能为空
 isClick(){
  if(!this.phone || !this.verifyCode) {
  return true
  } else {
  return false
  }
     
 }
},

3.2点击登录发送请求,得到的并存储到localStorage里面,最后跳转到登录页面

handleLogin() {
 //点击发送
 this.errors = {};
 this.$axios.post('/api/posts/sms_back',{
  phone:this.phone,
  code:this.verifyCode
 }).then(res => {
  console.log(res);
  localStorage.setItem('ele_login',true)
  this.$router.push('/')
 }).catch(error =>{
  //返回错误信息
  this.errors ={
  code:error.response.data.msg
 }
 })
}

总结

以上所述是小编给大家介绍的vue实现短信验证码登录功能,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

Javascript 相关文章推荐
一个可绑定数据源的jQuery数据表格插件
Jul 17 Javascript
js与jquery中获取当前鼠标的x、y坐标位置的代码
May 23 Javascript
JS获取地址栏参数的几种方法小结
Feb 28 Javascript
JavaScript 常见安全漏洞和自动化检测技术
Aug 21 Javascript
js中遍历Map对象的方法
Jul 27 Javascript
js基础之DOM中document对象的常用属性方法详解
Oct 28 Javascript
jQuery实现的模拟弹出窗口功能示例
Nov 24 Javascript
新版vue-cli模板下本地开发环境使用node服务器跨域的方法
Apr 03 Javascript
原生JS实现$.param() 函数的方法
Aug 10 Javascript
element-ui 设置菜单栏展开的方法
Aug 22 Javascript
vue 项目打包时样式及背景图片路径找不到的解决方式
Nov 12 Javascript
JavaScript数组类型Array相关的属性与方法详解
Sep 08 Javascript
基于vue实现图片验证码倒计时60s功能
Dec 10 #Javascript
使用Bootstrap做一个朝代历史表
Dec 10 #Javascript
JS实现拼图游戏
Jan 29 #Javascript
Vue的transition-group与Virtual Dom Diff算法的使用
Dec 09 #Javascript
Vue实现渲染数据后控制滚动条位置(推荐)
Dec 09 #Javascript
element-ui如何防止重复提交的方法步骤
Dec 09 #Javascript
js刷新页面location.reload()用法详解
Dec 09 #Javascript
You might like
用PHP实现文件上传二法
2006/10/09 PHP
php addslashes 利用递归实现使用反斜线引用字符串
2013/08/05 PHP
WIN8.1下搭建PHP5.6环境
2015/04/29 PHP
php微信公众平台开发之获取用户基本信息
2015/08/17 PHP
CLASS_CONFUSION JS混淆 全源码
2007/12/12 Javascript
jquery tools之tooltip
2009/07/25 Javascript
JQuery jsonp 使用示例代码
2009/08/12 Javascript
设置checkbox为只读(readOnly)的两种方式
2013/10/11 Javascript
Javascript变量作用域详解
2013/12/06 Javascript
javascript实现2048游戏示例
2014/05/04 Javascript
jquery中的常用事件bind、hover、toggle等示例介绍
2014/07/21 Javascript
Egret引擎开发指南之发布项目
2014/09/03 Javascript
node.js中的path.normalize方法使用说明
2014/12/08 Javascript
在线所见即所得HTML编辑器的实现原理浅析
2015/04/25 Javascript
jquery+CSS实现的多级竖向展开树形TRee菜单效果
2015/08/24 Javascript
jQuery实现每隔几条元素增加1条线的方法
2016/06/27 Javascript
浅谈js中StringBuffer类的实现方法及使用
2016/09/02 Javascript
实现easyui的datagrid导出为excel的示例代码
2016/11/10 Javascript
JS倒计时实例_天时分秒
2017/08/22 Javascript
js 获取json数组里面数组的长度实例
2017/10/31 Javascript
js保留两位小数方法总结
2018/01/31 Javascript
RequireJS用法简单示例
2018/08/20 Javascript
代码实例ajax实现点击加载更多数据图片
2018/10/12 Javascript
jQuery实现的隔行变色功能【案例】
2019/02/18 jQuery
实例讲解React 组件
2020/07/07 Javascript
浅谈vue中$event理解和框架中在包含默认值外传参
2020/08/07 Javascript
Nuxt 项目性能优化调研分析
2020/11/07 Javascript
[49:27]LGD vs OG 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
Python 字符串操作实现代码(截取/替换/查找/分割)
2013/06/08 Python
使用python绘制常用的图表
2016/08/27 Python
MAC Cosmetics官方网站:魅可专业艺术彩妆
2019/04/10 全球购物
古驰英国官网:GUCCI英国
2020/03/07 全球购物
金融专业大学生职业生涯规划范文
2014/01/16 职场文书
搞笑车尾标语
2014/06/23 职场文书
员工工作表现自我评价
2015/03/06 职场文书
Python实战之实现康威生命游戏
2021/04/26 Python