vue中使用cookies和crypto-js实现记住密码和加密的方法


Posted in Javascript onOctober 18, 2018

使用crypto-js加解密

第一步,安装

npm install crypto-js

第二步,在你需要的vue组件内import

import CryptoJS from "crypto-js";

第三步,使用

// Encrypt 加密 
  var cipherText = CryptoJS.AES.encrypt(
   "my message",
   "secretkey123"
  ).toString();
  console.log(cipherText)
  // Decrypt 解密
  var bytes = CryptoJS.AES.decrypt(cipherText, "secretkey123");
  var originalText = bytes.toString(CryptoJS.enc.Utf8);
  console.log(originalText); // 'my message'

注意这个mymessage是字符串,如果你要加密的用户id(number类型)得先转成字符串

更多使用请访问官方文档

记住密码

  • 实现原理是登录的时候,如果勾选了记住密码(把‘记住密码'状态保存到localstorage)就保存账号密码到cookies;
  • 之后进入登录页面的时候,判断是否记住了密码(从localstorage判断),如果记住密码则导出cookies到表单;

其中保存使用setcookie方法,取出则使用getcookie方法。

ok,我们来编写方法

//设置cookie
  setCookie(portId, psw, exdays) {
   // Encrypt,加密账号密码
   var cipherPortId = CryptoJS.AES.encrypt(
    portId+'',
    "secretkey123"
   ).toString();
   var cipherPsw = CryptoJS.AES.encrypt(psw+'', "secretkey123").toString();
   console.log(cipherPortId+'/'+cipherPsw)//打印一下看看有没有加密成功

   var exdate = new Date(); //获取时间
   exdate.setTime(exdate.getTime() + 24 * 60 * 60 * 1000 * exdays); //保存的天数
   //字符串拼接cookie,为什么这里用了==,因为加密后的字符串也有个=号,影响下面getcookie的字符串切割,你也可以使用更炫酷的符号。
   window.document.cookie =
    "currentPortId" +
    "==" +
    cipherPortId +
    ";path=/;expires=" +
    exdate.toGMTString();
   window.document.cookie =
    "password" +
    "==" +
    cipherPsw +
    ";path=/;expires=" +
    exdate.toGMTString();
  },
  //读取cookie
  getCookie: function() {
   if (document.cookie.length > 0) {
    var arr = document.cookie.split("; "); //这里显示的格式请根据自己的代码更改
    for (var i = 0; i < arr.length; i++) {
     var arr2 = arr[i].split("=="); //根据==切割
     //判断查找相对应的值
     if (arr2[0] == "currentPortId") {
      // Decrypt,将解密后的内容赋值给账号
      var bytes = CryptoJS.AES.decrypt(arr2[1], "secretkey123");
      this.currentPortId = bytes.toString(CryptoJS.enc.Utf8)-0;
     } else if (arr2[0] == "password") {
      // Decrypt,将解密后的内容赋值给密码
      var bytes = CryptoJS.AES.decrypt(arr2[1], "secretkey123");
      this.password = bytes.toString(CryptoJS.enc.Utf8);
     }
    }
   }
  },
  //清除cookie
  clearCookie: function() {
   this.setCookie("", "", -1); 
  }

登录的方法如下:

login() {
   this.$http //请根据实际情况修改该方法
    .post(...)
    .then(res => {
     if (res.data.code == "success") {
      if (this.rememberPsw == true) {
        //判断用户是否勾选了记住密码选项rememberPsw,传入保存的账号currentPortId,密码password,天数30
       this.setCookie(this.currentPortId, this.password, 30);
      }else{
       this.clearCookie();
      }
      //这里是因为要在created中判断,所以使用了localstorage比较简单,当然你也可以直接根据cookie的长度or其他骚操作来判断有没有记住密码。
      localStorage.setItem("rememberPsw", this.rememberPsw);
      
     } else {
      //----
     }
    })
    .catch(err => {
     //----
    });
  },

最后要在created狗子函数内判断用户是否记住了密码来执行相关的操作

//判断是否记住密码
//**注意这里的true是字符串格式,因为Boolean存进localstorage中会变成String**
 created() {
  //判断是否记住密码
  if (localStorage.getItem("rememberPsw") == 'true') {
   this.getCookie();
  }
 }

最后,界面贴上,其中rememberPsw是记住密码按钮的v-model值,currentPortId是第一个框的v-model值,password就是第二个框的v-model值啦。

vue中使用cookies和crypto-js实现记住密码和加密的方法

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
javascript 中对象的继承〔转贴〕
Jan 22 Javascript
基于jquery可配置循环左右滚动例子
Sep 09 Javascript
jQuery表格插件datatables用法总结
Sep 05 Javascript
js实现单击图片放大图片的方法
Feb 17 Javascript
JavaScript列表框listbox全选和反选的实现方法
Mar 18 Javascript
深入理解jQuery 事件处理
Jun 14 Javascript
Input文本框随着输入内容多少自动延伸的实现
Feb 15 Javascript
详解Node.js使用token进行认证的简单示例
May 25 Javascript
Node.js API详解之 vm模块用法实例分析
May 27 Javascript
VueX模块的具体使用(小白教程)
Jun 05 Javascript
浅谈JavaScript节流和防抖函数
Aug 25 Javascript
Nest.js参数校验和自定义返回数据格式详解
Mar 29 Javascript
vue中导出Excel表格的实现代码
Oct 18 #Javascript
vue实现pdf导出解决生成canvas模糊等问题(推荐)
Oct 18 #Javascript
vue 指令之气泡提示效果的实现代码
Oct 18 #Javascript
使用JS获取页面上的所有标签
Oct 18 #Javascript
深入理解 Koa 框架中间件原理
Oct 18 #Javascript
JS实现十分钟倒计时代码实例
Oct 18 #Javascript
基于Vue实现可以拖拽的树形表格实例详解
Oct 18 #Javascript
You might like
thinkphp3.2.2前后台公用类架构问题分析
2014/11/25 PHP
php实现可逆加密的方法
2015/08/11 PHP
PHP快速排序quicksort实例详解
2016/09/28 PHP
php使用SAE原生Mail类实现各种类型邮件发送的方法
2016/10/10 PHP
php实现登陆模块功能示例
2016/10/20 PHP
php使用imagecopymerge()函数创建半透明水印
2018/01/25 PHP
PHP pthreads v3下同步处理synchronized用法示例
2020/02/21 PHP
收集的网上用的ajax之chat.js文件
2007/04/08 Javascript
javascript简单实现命名空间效果
2014/03/06 Javascript
推荐5 个常用的JavaScript调试技巧
2015/01/08 Javascript
seajs模块之间依赖的加载以及模块的执行
2016/10/21 Javascript
js实现简单的获取验证码按钮效果
2017/03/03 Javascript
在angular 6中使用 less 的实例代码
2018/05/13 Javascript
解决Vue.js由于延时显示了{{message}}引用界面的问题
2018/08/25 Javascript
vue 插件的方法代码详解
2019/06/06 Javascript
Vue Router 实现动态路由和常见问题及解决方法
2020/03/06 Javascript
详解vue-flickity的fullScreen功能实现
2020/04/07 Javascript
在vue中实现禁止屏幕滚动,禁止屏幕滑动
2020/07/22 Javascript
JS如何生成动态列表
2020/09/22 Javascript
js实现星星海特效的示例
2020/09/28 Javascript
[42:24]完美世界DOTA2联赛PWL S2 LBZS vs FTD.C 第三场 11.27
2020/12/01 DOTA
matplotlib绘制动画代码示例
2018/01/02 Python
Python、 Pycharm、Django安装详细教程(图文)
2019/04/12 Python
使用python批量修改文件名的方法(视频合并时)
2020/03/24 Python
在pycharm中显示python画的图方法
2019/08/31 Python
python numpy实现rolling滚动案例
2020/06/08 Python
pandas.DataFrame.drop_duplicates 用法介绍
2020/07/06 Python
class类在python中获取金融数据的实例方法
2020/12/10 Python
世界上最好的儿童品牌:AlexandAlexa
2018/01/27 全球购物
法学个人求职信范文
2014/01/27 职场文书
大学生先进事迹材料
2014/02/16 职场文书
交通志愿者活动总结
2014/06/27 职场文书
搞笑婚前保证书
2015/02/28 职场文书
销售区域经理岗位职责
2015/04/10 职场文书
欠款纠纷起诉状
2015/05/19 职场文书
新人入职感言
2015/07/31 职场文书