相关内容    简体    繁体

【技术博客】忘记密码界面的Vue前端实现


一、基本流程

【登录界面】 --> 【点击忘记密码】 --> 【输入个人邮箱和验证码】 --> 【系统发送邮箱验证】 --> 【用户在限定时间内登录邮箱,查收验证码】 -->【完成身份验证,进入重置密码界面】-->【重置密码,系统更新密码】--> 【重置密码完毕,点击进入登录界面】。

由于我们默认采用BUAA的邮箱进行身份验证,故在身份验证界面输入学号,系统会向该学号相应的北航邮箱发送验证码信息。

二、主要界面

1、登陆界面

login

  • 【忘记密码】【还没有账号?点击注册】如何分别在一行的两端显示?

    可以使用浮动float。

    <div class="tips"  style="float:left;">              
         <el-link type="white" @click="retrievePWD">忘记密码</el-link>
    </div>
    <div class="tips"  style="float:right;">         
         <el-link type="white" @click="regis">还没有账号?点击注册</el-link>              </div>			
    
  • 点击【忘记密码】页面跳转

    retrievePWD(){
          this.$router.push({ path: '/retrievePassword' })
        }
    

2、找回密码界面

找回密码界面我使用了 vuetify的步骤条组件,分为三个步骤,框架如下:

frame

	<v-stepper v-model="e1"> 
            <v-stepper-header>
              <v-stepper-step :complete="e1 > 1" step="1">身份验证</v-stepper-step>
              <v-divider></v-divider>
              <v-stepper-step :complete="e1 > 2" step="2">密码重置</v-stepper-step>
              <v-divider></v-divider>
              <v-stepper-step step="3">重置完成</v-stepper-step>
            </v-stepper-header>

            <v-stepper-items>
              <v-stepper-content step="1">
               <!-- 步骤一的内容-->               
              </v-stepper-content>

              <v-stepper-content step="2">
                <!-- 步骤二的内容-->          
              </v-stepper-content>
				
              <v-stepper-content step="3">
                 <!-- 步骤三的内容-->   
              </v-stepper-content>
            </v-stepper-items>
        </v-stepper>       

2.1 身份验证界面

基本逻辑为:

【输入学号】-->【点击获取邮箱验证码】(校验学号格式是否正确;若正确,则后端判断该学号是否已注册。只有已注册的学号,系统才会发送邮箱验证码,否则显示错误信息)-->【前往邮箱,查收验证码并输入】-->【点击下一步】(向后端提交学号和验证码,后端判断是否匹配,若匹配则身份验证成功,进入重置密码页面,否则显示错误信息)

authCode

  • element_ui表单验证如何只让它验证其中一项?

    // form为表单名字并ref="form"; prop 换成你想监听的prop字段
    this.$refs.form.validateField(prop, (errMsg) => {
                   if (errMsg) {
                       console.log('校验失败')
                   }else{
                   		//...
                   }
               })
    
  • 【获取邮箱验证码】按钮的实现

    该按钮具有倒计时功能,具体实现如下:

    //msg绑定了按钮显示的内容 利用了vue的双向绑定原理
    <el-button plain :disabled="flag" @click="getAuthCode">{{ msg }}</el-button>
    
    getAuthCode(){
        	//对输入的学号格式进行校验
            this.$refs.form1.validateField('uid', (errMsg) => {
                   if (errMsg) {
                       console.log('学号校验未通过')
                   }else {               
                    var postData={
                      uid:this.form1.uid
                    }
                     //后端先判断该学号是否存在,再给北航邮箱发送验证码
                    sendAuthCode(postData).then(res => {      
                      //获取验证码按钮倒计时功能的实现
                      const _this =this;//!!坑!setInterval中的this指向问题
                      this.flag = true; //!按钮不可重复点击
                      var time = 150;//定义时间变量 150s
                      var timer = null;//定义定时器
                      timer = setInterval(function(){
                        if(time==0){
                          _this.msg="重新获取验证码";                          
                          _this.flag=false;            
                          clearInterval(timer);//清除定时器
                        }else{
                          _this.msg=time+"秒后重新获取";                     
                          time--;
                        }                    
                      },1000)  
                      }).catch(error => {
                        console.log(error)
                      })  
                   }
               })
          },
    

    这里有几个特别需要注意的地方(踩过的坑,大家小心!):

    • 为了避免迅速点击按钮多次发送验证码的情况,需在点击按钮后,将按钮设置为disabled属性。

    • js代码会从上到下执行,但是当遇到异步的情况,如axios请求时,并不会等拿到请求结果再做之后的操作,如果这时需要用到请求结果,则会出现错误,一般采用回调函数的方式解决。将需要请求数据的方法放在axios请求的回调函数中,待请求执行完成再做操作。

    • setInterval ()中的this指向的是window中的对象,而非vue对象,这导致我一开始无法正确渲染msg的内容。故此处的解决办法是,将当前对象的this存为另一个变量_this,在setInterval()中进行指代。

      详见博客 关于setInterval和setTImeout中的this指向问题

2.2 重置密码界面

在通过身份验证之后,后端会返回pub_keykey_id等信息用于密码的加密传输和身份匹配。这里不做介绍,详见该项目的其他技术博客。

基本逻辑:

【输入两次密码】-->【点击下一步】(校验密码是否一致,若一致则将密码加密传给后端,否则显示错误信息)-->【后端更新密码】

reset

  • 校验规则

    var validatePass = (rule, value, callback) => {
            if (value === '') {
              callback(new Error('请输入密码'));
            } else {
              if (this.form2.checkPass !== '') {
                this.$refs.form2.validateField('checkPass');
              }
              callback();
            }
          };
          var validatePass2 = (rule, value, callback) => {
            if (value === '') {
              callback(new Error('请再次输入密码'));
            } else if (value !== this.form2.password) {
              callback(new Error('两次输入密码不一致!'));
            } else {
              callback();
            }
          };
    
    rules2:{
              password: [
                { require: true, validator: validatePass, trigger: 'blur' }
              ],
              checkPass: [
                { validator: validatePass2, trigger: 'blur' }
              ],
            },
    
  • 前后端交互

    nextStep2(formName){
            console.log(formName);
            this.$refs[formName].validate((valid) => {
              if (valid) {
                var submitForm = {
                  uid:this.uid,
                  password: this.encryptPWD(this.form2.password),  //传回加密后的密码   
                }
                console.log(submitForm)
                //与后端交互            
                resetPWD(submitForm).then(res => {        
                  this.e1=3;//进入下一步骤【重置完成】              
                }).catch(error => {
                  console.log(error)
                })
              } else {            
                return false;
              }                
              })    
    
          }
    

2.3 重置完成

return

  • 【重新登陆】按钮
<div  class="text-center">        
     <v-btn color="primary" @click="login"  >重新登录</v-btn>
</div>

login() {
        this.$router.push({ path: '/login' })
      },


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



猜您在找 asp.net mvc4 修改密码界面 [技术博客]前端右键菜单的实现 解决 ubuntu 开机卡死在输入密码界面 && 键盘鼠标失灵!! Web前端-网站首页和注册界面的实现 Android忘记密码功能实现 关于halo博客系统的使用踩坑——忘记登录密码 java web实现 忘记密码(找回密码)功能及代码 个人技术总结---Android前端界面框架搭建 Ubuntu Server忘记密码后,单用户模式修改密码进去不了桌面的无奈 android开机引导界面的几种实现
 
粤ICP备18138465号  © 2018-2024 CODEPRJ.COM

深圳SEO优化公司连云港关键词按天扣费报价吉安SEO按效果付费推荐鄂州关键词排名包年推广伊春网站推广工具推荐思茅百度网站优化报价中山seo排名多少钱秦皇岛百姓网标王多少钱重庆建站公司安阳网站优化按天收费公司太原百度网站优化报价衡阳英文网站建设公司景德镇网站建设重庆百度网站优化排名推荐秦皇岛网站优化推广茂名网站优化按天收费公司昆明百搜标王哪家好宿州网站推广方案报价辽阳优化多少钱德州关键词按天收费哪家好铜川推广网站多少钱昆明建站多少钱坪地英文网站建设推荐昌都网站优化推广哪家好三明建站价格石岩营销网站推荐烟台百姓网标王推广推荐濮阳关键词按天收费价格坪山百度竞价价格济源百度关键词包年推广哪家好运城网站排名优化多少钱歼20紧急升空逼退外机英媒称团队夜以继日筹划王妃复出草木蔓发 春山在望成都发生巨响 当地回应60岁老人炒菠菜未焯水致肾病恶化男子涉嫌走私被判11年却一天牢没坐劳斯莱斯右转逼停直行车网传落水者说“没让你救”系谣言广东通报13岁男孩性侵女童不予立案贵州小伙回应在美国卖三蹦子火了淀粉肠小王子日销售额涨超10倍有个姐真把千机伞做出来了近3万元金手镯仅含足金十克呼北高速交通事故已致14人死亡杨洋拄拐现身医院国产伟哥去年销售近13亿男子给前妻转账 现任妻子起诉要回新基金只募集到26元还是员工自购男孩疑遭霸凌 家长讨说法被踢出群充个话费竟沦为间接洗钱工具新的一天从800个哈欠开始单亲妈妈陷入热恋 14岁儿子报警#春分立蛋大挑战#中国投资客涌入日本东京买房两大学生合买彩票中奖一人不认账新加坡主帅:唯一目标击败中国队月嫂回应掌掴婴儿是在赶虫子19岁小伙救下5人后溺亡 多方发声清明节放假3天调休1天张家界的山上“长”满了韩国人?开封王婆为何火了主播靠辱骂母亲走红被批捕封号代拍被何赛飞拿着魔杖追着打阿根廷将发行1万与2万面值的纸币库克现身上海为江西彩礼“减负”的“试婚人”因自嘲式简历走红的教授更新简介殡仪馆花卉高于市场价3倍还重复用网友称在豆瓣酱里吃出老鼠头315晚会后胖东来又人满为患了网友建议重庆地铁不准乘客携带菜筐特朗普谈“凯特王妃P图照”罗斯否认插足凯特王妃婚姻青海通报栏杆断裂小学生跌落住进ICU恒大被罚41.75亿到底怎么缴湖南一县政协主席疑涉刑案被控制茶百道就改标签日期致歉王树国3次鞠躬告别西交大师生张立群任西安交通大学校长杨倩无缘巴黎奥运

深圳SEO优化公司 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化