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 相关文章推荐
asp 的 分词实现代码
May 24 Javascript
纯js实现瀑布流展现照片(自动适应窗口大小)
Apr 08 Javascript
javascript修改表格背景色实例代码分享
Dec 10 Javascript
javascript基于DOM实现省市级联下拉框的方法
May 14 Javascript
用JavaScript实现页面重定向功能的教程
Jun 04 Javascript
jquery实现简单的轮换出现效果实例
Jul 23 Javascript
javascript实现二级级联菜单的简单制作
Nov 19 Javascript
jquery二级目录选中当前页的css样式
Dec 08 Javascript
Node.js对MongoDB数据库实现模糊查询的方法
May 03 Javascript
vue mounted 调用两次的完美解决办法
Oct 29 Javascript
js实现轮播图效果 z-index实现轮播图
Jan 17 Javascript
微信小程序 WeUI扩展组件库的入门教程
Apr 21 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
Window 7/XP 安装Apache 2.4与PHP 5.4 的过程详解
2013/06/02 PHP
PHP之浮点数计算比较以及取整数不准确的解决办法
2015/07/29 PHP
PHP查询并删除数据库多列重复数据的方法(利用数组函数实现)
2016/02/23 PHP
ThinkPHP中session函数详解
2016/09/14 PHP
jQuery模拟超链接点击效果代码
2013/04/21 Javascript
JavaScript自执行闭包的小例子
2013/06/29 Javascript
jquery提交form表单时禁止重复提交的方法
2014/02/13 Javascript
JavaScript中使用Object.create()创建对象介绍
2014/12/30 Javascript
JavaScript日期时间与时间戳的转换函数分享
2015/01/31 Javascript
Javascript对象字面量的理解
2016/06/22 Javascript
JS添加删除DIV的简单实例
2016/07/08 Javascript
React-router中结合webpack实现按需加载实例
2017/05/25 Javascript
Vue.js对象转换实例
2017/06/07 Javascript
webpack开发跨域问题解决办法
2017/08/03 Javascript
详细分析jsonp的原理和实现方式
2017/11/20 Javascript
js监听html页面的上下滚动事件方法
2018/09/11 Javascript
详解JavaScript的变量
2019/04/04 Javascript
layui默认选中table的CheckBox复选框方法
2019/09/19 Javascript
Django集成百度富文本编辑器uEditor攻略
2014/07/04 Python
浅析Python中的多重继承
2015/04/28 Python
Python检查ping终端的方法
2019/01/26 Python
Django中celery执行任务结果的保存方法
2019/07/12 Python
详解python中各种文件打开模式
2020/01/19 Python
Python3操作读写CSV文件使用包过程解析
2020/04/10 Python
Python HTMLTestRunner如何下载生成报告
2020/09/04 Python
在python中对于bool布尔值的取反操作
2020/12/11 Python
python 邮件检测工具mmpi的使用
2021/01/04 Python
党章学习思想汇报
2014/01/14 职场文书
爽歪歪广告词
2014/03/20 职场文书
医院义诊活动总结
2014/07/04 职场文书
捐资助学感谢信
2015/01/21 职场文书
机动车交通事故协议书
2015/01/29 职场文书
一封真诚的自荐信帮你赢得机会
2019/05/07 职场文书
Python3 类型标注支持操作
2021/06/02 Python
MySQL系列之十五 MySQL常用配置和性能压力测试
2021/07/02 MySQL
Python实战之大鱼吃小鱼游戏的实现
2022/04/01 Python