Vue+element+cookie记住密码功能的简单实现方法


Posted in Javascript onSeptember 20, 2020

实现功能:

1、登录时勾选记住密码,用cookie保存账号和密码并对密码进行两次加密处理(纯前端),下次登录自动输入账号密码

2、登录时不勾选,清空cookie,下次登录需要输入

效果图:

Vue+element+cookie记住密码功能的简单实现方法

=============================================================================================================================================================================================

Html

<div class="login-form-item">
     <el-form :model="ValidateForm" ref="ValidateForm" label-width="100px" class="demo-ruleForm">
      <el-form-item

        prop="username"
        :rules="[{ required: true, message: '用户名不能为空'}
      ]">
       <span><i class="el-icon-user"></i></span><el-input type="username" v-model.number="ValidateForm.username" autocomplete="off" clearable placeholder="用户名"></el-input>
      </el-form-item>
      <br>
      <el-form-item

        prop="password"
        :rules="[{ required: true, message: '密码不能为空'},
      ]">
       <span><i class="el-icon-lock"></i></span><el-input type="password" v-model.number="ValidateForm.password" autocomplete="off" clearable show-password placeholder="密码"></el-input>
      </el-form-item>
      <br>
      <el-form-item

        prop="sidentify"
        :rules="[
{ required: true, message: '验证码不能为空'},]"
      >
       <el-row class="sidentify">
        <el-col :span="21">
         <el-input type="age" v-model="ValidateForm.sidentify" autocomplete="off" placeholder="验证码"></el-input>
        </el-col>
        <el-col :span="3" class="sidentify sidentify-img">
         <sidentify :changeCode.sync='identifyCode' ref="switchSidentify"></sidentify>
        </el-col>
       </el-row>
      </el-form-item>
      <el-form-item>
       <el-checkbox v-model="checked" class="sidentify">记住密码</el-checkbox>
      </el-form-item>
      <el-form-item>
       <el-button type="primary" @click="submitForm('ValidateForm')" class="login-btn">登录</el-button>
      </el-form-item>
     </el-form>
    </div>

加密方法我用的base64和CryptoJS 大家记得去下载

Vue+element+cookie记住密码功能的简单实现方法

js部分:

登录

// 登录
submitForm(formName) {
 this.$refs[formName].validate((valid) => {
  if (valid) {
   let username=this.ValidateForm.username;
   let pwd=this.ValidateForm.password;
   let sidentify=this.ValidateForm.sidentify;
   // 验证码通过
   if (sidentify == this.identifyCode){
    this.request.post(this.api.login.logindo,{username:username,pwd:pwd}).then((res)=>{
     console.log(res);
     if (res.data.code == 200){
      this.$message({
       message : '登录成功!',
       type : 'success'
      })
      //调用check选中方法
      this.checkedPwd(username,pwd)
      this.$router.push({name:'Home'})
     }else {
      this.$message({
       message : '账号或密码错误,请重新输入!',
       type : 'error'
      })
      //清空
      this.resetForm('ValidateForm')
      //刷新验证码
      this.$refs.switchSidentify.changeCode()
     }
    })
   }else {
    this.$message({
     message : '验证码输入错误,请重新输入!',
     type : 'error'
    })
    this.$refs.switchSidentify.changeCode()
    this.resetForm('ValidateForm')
   }
  } else {
   return false;
  }
 });
},

check方法:

checkedPwd(username,pwd){
 // 记住密码进行cookie存储和密码加密
 if (this.checked){
  // base64 加密
  let base64Pwd=Base64.encode(pwd);
  // Encrypt 加密
  let cryptoJsPwd=CryptoJS.AES.encrypt(base64Pwd,key).toString()
  // 账号密码保存天数
  this.setCookie(username,cryptoJsPwd,7)
 }else{
  // 清空
  this.clearCookie()
 }
},

设置读取和清空cookie

// 设置cookie
setCookie(c_name, c_pwd, exdays) {
 var exdate = new Date(); // 获取时间
 exdate.setTime(exdate.getTime() + 24 * 60 * 60 * 1000 * exdays); // 保存的天数
 // 字符串拼接cookie
 window.document.cookie = "username" + "=" + c_name + ";path=/;expires=" + exdate.toGMTString();
 window.document.cookie = "password" + "=" + c_pwd + ";path=/;expires=" + exdate.toGMTString();
},
// 读取cookie
getCookie: function() {
 if (document.cookie.length > 0) {
  //checked为true
  this.checked=true
  var arr = document.cookie.split('; ');
  for (var i = 0; i < arr.length; i++) {
   var arr2 = arr[i].split('=');
   if (arr2[0] == 'username') {
    this.ValidateForm.username = arr2[1];
   } else if (arr2[0] == 'password') {
    // Decrypt 解密
    let bytes = CryptoJS.AES.decrypt(arr2[1],key)
    let originalText=bytes.toString(CryptoJS.enc.Utf8)
    // base64解密
    let pwd=Base64.decode(originalText)
    this.ValidateForm.password = pwd;
   }
  }
 }
},
// 清除cookie
clearCookie: function() {
 this.setCookie("", "", -1); // 修改2值都为空,天数为负1天就好了
},

一定要创建后读取cookie

created () {
 this.getCookie()
},

总结

到此这篇关于Vue+element+cookie记住密码功能的简单实现方法文章就介绍到这了,更多相关Vue+element+cookie记住密码功能内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Javascript 相关文章推荐
70+漂亮且极具亲和力的导航菜单设计国外网站推荐
Sep 20 Javascript
JS动态添加option和删除option(附实例代码)
Apr 01 Javascript
jquery如何根据值设置默认的选中项
Mar 17 Javascript
在浏览器中打开或关闭JavaScript的方法
Jun 03 Javascript
js使用i18n实现页面国际化的方法
May 09 Javascript
jQuery序列化后的表单值转换成Json
Jun 16 jQuery
vue中路由参数传递可能会遇到的坑
Dec 07 Javascript
Swiper自定义分页器使用详解
Dec 28 Javascript
Vue.js 中的 v-cloak 指令及使用详解
Nov 19 Javascript
使用Three.js实现太阳系八大行星的自转公转示例代码
Apr 09 Javascript
JS实现数组删除指定元素功能示例
Jun 05 Javascript
js实现3D粒子酷炫动态旋转特效
Sep 13 Javascript
解决vue项目运行提示Warnings while compiling.警告的问题
Sep 18 #Javascript
vue-cli3 热更新配置操作
Sep 18 #Javascript
vue-cli 关闭热更新操作
Sep 18 #Javascript
Node.JS如何实现JWT原理
Sep 18 #Javascript
浏览器JavaScript调试功能无法使用解决方案
Sep 18 #Javascript
js将日期格式转换为YYYY-MM-DD HH:MM:SS
Sep 18 #Javascript
js实现手表表盘时钟与圆周运动
Sep 18 #Javascript
You might like
基于PHP+Ajax实现表单验证的详解
2013/06/25 PHP
字符串长度函数strlen和mb_strlen的区别示例介绍
2014/09/09 PHP
php数组操作之键名比较与差集、交集赋值的方法
2014/11/10 PHP
thinkphp如何获取客户端IP
2015/11/03 PHP
PHP内核探索之变量
2015/12/22 PHP
jQuery 类twitter的文本字数限制带提示效果插件
2010/04/16 Javascript
ie下动态加态js文件的方法
2011/09/13 Javascript
javascript删除option选项的多种方法总结
2013/11/22 Javascript
js实现可拖动DIV的方法
2013/12/17 Javascript
js控制input输入字符解析
2013/12/27 Javascript
JS中表单的使用小结
2014/01/11 Javascript
如何获取网站icon有哪些可行的方法
2014/06/05 Javascript
jQuery基础知识小结
2014/12/22 Javascript
浅谈javascript构造函数与实例化对象
2015/06/22 Javascript
javaScript中的原型解析【推荐】
2016/05/05 Javascript
Jquery $when done then的用法详解
2016/05/20 Javascript
JavaScript lodash常见用法系列小结
2016/08/24 Javascript
微信小程序 数组(增,删,改,查)等操作实例详解
2017/01/05 Javascript
xmlplus组件设计系列之树(Tree)(9)
2017/05/02 Javascript
webpack下实现动态引入文件方法
2018/02/22 Javascript
全面了解JavaScript的作用域链
2019/04/03 Javascript
[01:18:31]DOTA2-DPC中国联赛定级赛 LBZS vs Magma BO3第一场 1月10日
2021/03/11 DOTA
python对数组进行反转的方法
2015/05/20 Python
Python查找数组中数值和下标相等的元素示例【二分查找】
2019/02/13 Python
Python开启线程,在函数中开线程的实例
2019/02/22 Python
python实现处理mysql结果输出方式
2020/04/09 Python
Python 执行矩阵与线性代数运算
2020/08/01 Python
Python threading模块condition原理及运行流程详解
2020/10/05 Python
python中random模块详解
2021/03/01 Python
会计的岗位职责
2014/03/15 职场文书
公证委托书模板
2014/04/03 职场文书
2015年党务公开工作总结
2015/05/19 职场文书
春节随笔
2015/08/15 职场文书
深入理解python多线程编程
2021/04/18 Python
Vue操作Storage本地化存储
2022/04/29 Vue.js
利用Python实时获取steam特惠游戏数据
2022/06/25 Python