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中绑定事件(bind())和移除事件(unbind())
Feb 27 Javascript
jQuery实现的输入框选择时间插件用法实例
Feb 28 Javascript
jQuery可见性过滤器:hidden和:visibility用法实例
Jun 24 Javascript
Angular中$compile源码分析
Jan 28 Javascript
教你JS中的运算符乘方、开方及变量格式转换
Aug 09 Javascript
微信小程序 前端源码逻辑和工作流详解
Oct 08 Javascript
Node.js成为Web应用开发最佳选择的原因
Feb 05 Javascript
Angularjs中的$apply及优化使用详解
Jul 02 Javascript
使用gulp构建前端自动化的方法示例
Dec 25 Javascript
解决node终端下运行js文件不支持ES6语法
Apr 04 Javascript
详解vue 组件的实现原理
Nov 12 Javascript
JS获取一个字符串中指定字符串第n次出现的位置
Feb 10 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
wordpress之wp-settings.php
2007/08/17 PHP
ThinkPHP提示错误Fatal error: Allowed memory size的解决方法
2015/02/12 PHP
PDO防注入原理分析以及注意事项
2015/02/25 PHP
js函数中onmousedown和onclick的区别和联系探讨
2013/05/19 Javascript
jquery统计复选框选中示例
2013/11/05 Javascript
jquery attr方法获取input的checked属性问题
2014/05/26 Javascript
用jquery的方法制作一个简单的导航栏
2014/06/23 Javascript
如何编写高质量JS代码
2014/12/28 Javascript
ubuntu下安装nodejs以及升级的办法
2015/05/08 NodeJs
JavaScript中Null与Undefined的区别解析
2015/06/30 Javascript
node.js版本管理工具n无效的原理和解决方法
2016/11/24 Javascript
纯JavaScript实现实时反馈系统时间
2017/10/26 Javascript
JavaScript数据结构与算法之队列原理与用法实例详解
2017/11/22 Javascript
基于substring()和substr()的使用以及区别(实例讲解)
2017/12/28 Javascript
Vue2.0实现调用摄像头进行拍照功能 exif.js实现图片上传功能
2018/04/28 Javascript
微信小程序自定义导航教程(兼容各种手机)
2018/12/12 Javascript
vue单文件组件lint error自动fix与styleLint报错自动fix详解
2019/01/08 Javascript
layui实现form表单同时提交数据和文件的代码
2019/10/25 Javascript
Vue父子之间值传递的实例教程
2020/07/02 Javascript
基于js实现判断浏览器类型代码实例
2020/07/17 Javascript
[02:38]DOTA2亚洲邀请赛小组赛精彩集锦:Wings完美团击溃对手
2017/03/29 DOTA
python中ConfigParse模块的用法
2014/09/29 Python
Python 的描述符 descriptor详解
2016/02/27 Python
浅析Python中元祖、列表和字典的区别
2016/08/17 Python
Python 绘图和可视化详细介绍
2017/02/11 Python
python基于pyDes库实现des加密的方法
2017/04/29 Python
浅谈django orm 优化
2018/08/18 Python
pycharm运行出现ImportError:No module named的解决方法
2018/10/13 Python
Python中利用aiohttp制作异步爬虫及简单应用
2018/11/29 Python
python实现诗歌游戏(类继承)
2019/02/26 Python
中国最大的名表商城:万表网
2016/08/29 全球购物
N:Philanthropy官网:美国洛杉矶基础款服装
2020/06/09 全球购物
药学专业大学生自荐信
2013/09/28 职场文书
python数据分析之用sklearn预测糖尿病
2021/04/22 Python
解决go在函数退出后子协程的退出问题
2021/04/30 Golang
JAVA长虹键法之建造者Builder模式实现
2022/04/10 Java/Android