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 相关文章推荐
用htc组件制作windows选项卡
Jan 13 Javascript
syntaxhighlighter 使用方法
Jul 02 Javascript
CodeMirror2 IE7/IE8 下面未知运行时错误的解决方法
Mar 29 Javascript
jQuery对象和Javascript对象之间转换的实例代码
Mar 20 Javascript
判断及设置浏览器全屏模式
Apr 20 Javascript
JavaScript实现的圆形浮动标签云效果实例
Aug 06 Javascript
jQuery实现带有动画效果的回到顶部和底部代码
Nov 04 Javascript
基于JS实现省市联动效果代码分享
Jun 06 Javascript
AngularJS基础 ng-options 指令详解
Aug 02 Javascript
Vue项目中引入外部文件的方法(css、js、less)
Jul 24 Javascript
JavaScript ES6常用基础知识总结
Feb 09 Javascript
ant design的table组件实现全选功能以及自定义分页
Nov 17 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
php学习之 循环结构实现代码
2011/06/09 PHP
Yii框架调试心得--在页面输出执行sql语句
2014/12/25 PHP
PHP编程中的__clone()方法使用详解
2015/11/27 PHP
PHP中substr_count()函数获取子字符串出现次数的方法
2016/01/07 PHP
php实现按天数、星期、月份查询的搜索框
2016/05/02 PHP
Laravel使用scout集成elasticsearch做全文搜索的实现方法
2018/11/30 PHP
IE7提供XMLHttpRequest对象为兼容
2007/03/08 Javascript
js弹窗代码 可以指定弹出间隔
2010/07/03 Javascript
返回对象在当前级别中是第几个元素的实现代码
2011/01/20 Javascript
用JQuery在网页中实现分隔条功能的代码
2012/08/09 Javascript
Angularjs 滚动加载更多数据
2016/03/17 Javascript
JS获取子窗口中返回的数据实现方法
2016/05/28 Javascript
Angularjs处理页面闪烁的解决方法
2017/03/09 Javascript
微信小程序 动态传参实例详解
2017/04/27 Javascript
js微信应用场景之微信音乐相册案例分享
2017/08/11 Javascript
Vue组件之全局组件与局部组件的使用详解
2017/10/09 Javascript
vue中使用vue-router切换页面时滚动条自动滚动到顶部的方法
2017/11/28 Javascript
基于 D3.js 绘制动态进度条的实例详解
2018/02/26 Javascript
解决vue props 拿不到值的问题
2018/09/11 Javascript
vue实现路由切换改变title功能
2019/05/28 Javascript
微信头像地址失效踩坑记附带解决方案
2019/09/23 Javascript
在vue中利用v-html按分号将文本换行的例子
2019/11/14 Javascript
微信小程序实现星级评价
2019/11/20 Javascript
angularjs模态框的使用代码实例
2019/12/20 Javascript
Python中装饰器的一个妙用
2015/02/08 Python
python实现简单ftp客户端的方法
2015/06/28 Python
python3 requests库文件上传与下载实现详解
2019/08/22 Python
图解CSS3制作圆环形进度条的实例教程
2016/05/26 HTML / CSS
html5 Web SQL Database 之事务处理函数transaction与executeSQL解析
2013/11/07 HTML / CSS
优秀体育委员自荐书
2014/01/31 职场文书
质量月活动总结
2014/08/26 职场文书
公司离职证明样本
2014/09/13 职场文书
2014年后勤工作总结范文
2014/12/16 职场文书
2014年学校办公室工作总结
2014/12/19 职场文书
2015年求职自荐信范文
2015/03/04 职场文书
Python进程池与进程锁之语法学习
2022/04/11 Python