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 相关文章推荐
JS 统计时间
Mar 09 Javascript
jQuery打印指定区域Html页面并自动分页
Jul 04 Javascript
js 左右悬浮对联广告代码示例
Dec 12 Javascript
ES6新数据结构Map功能与用法示例
Mar 31 Javascript
使用JS在浏览器中判断当前网络连接状态的几种方法
May 05 Javascript
详解webpack性能优化——DLL
Oct 20 Javascript
360doc网站不登录就无法复制内容的解决方法
Jan 27 Javascript
vue 使用自定义指令实现表单校验的方法
Aug 28 Javascript
JS实现的A*寻路算法详解
Dec 14 Javascript
微信小程序实现跳转的几种方式总结(推荐)
Apr 24 Javascript
简单通过settimeout看javascript的运行机制
May 10 Javascript
javascript 设计模式之享元模式原理与应用详解
Apr 08 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 空格,换行,跳格使用说明
2009/12/18 PHP
PHP 清空varnish 缓存的详解(包括指定站点下的)
2013/06/20 PHP
php中mt_rand()随机数函数用法
2014/11/24 PHP
laravel学习教程之存取器
2016/07/30 PHP
PHP高效获取远程图片尺寸和大小的实现方法
2017/10/20 PHP
layui框架实现文件上传及TP3.2.3(thinkPHP)对上传文件进行后台处理操作示例
2018/05/12 PHP
利用PHP内置SERVER开启web服务(本地开发使用)
2021/03/09 PHP
不要在cookie中使用特殊字符的原因分析
2010/07/13 Javascript
jquery 单击li防止重复加载的实现代码
2010/12/24 Javascript
div模拟滚动条效果示例代码
2013/10/16 Javascript
js jquery分别实现动态的文件上传操作按钮的添加和删除
2014/01/13 Javascript
JavaScript使用位运算符判断奇数和偶数的方法
2015/06/01 Javascript
JS实现的N多简单无缝滚动代码(包含图文效果)
2015/11/06 Javascript
Node.js连接MongoDB数据库产生的问题
2017/02/08 Javascript
js return返回多个值,通过对象的属性访问方法
2017/02/21 Javascript
js实现多行文本框统计剩余字数功能
2017/03/28 Javascript
jQuery Collapse1.1.0折叠插件简单使用
2017/08/28 jQuery
JavaScript ES6箭头函数使用指南
2018/12/30 Javascript
layer.confirm()右边按钮实现href的例子
2019/09/27 Javascript
微信小程序上传帖子的实例代码(含有文字图片的微信验证)
2020/07/11 Javascript
[02:25]DOTA2英雄基础教程 生死判决瘟疫法师
2013/12/06 DOTA
详解Django框架中用户的登录和退出的实现
2015/07/23 Python
详解python中的文件与目录操作
2017/07/11 Python
pip安装时ReadTimeoutError的解决方法
2018/06/12 Python
在Django model中设置多个字段联合唯一约束的实例
2019/07/17 Python
基于python实现学生信息管理系统
2019/11/22 Python
Linux下升级安装python3.8并配置pip及yum的教程
2020/01/02 Python
tensorflow 获取所有variable或tensor的name示例
2020/01/04 Python
Python log模块logging记录打印用法解析
2020/01/20 Python
对python中arange()和linspace()的区别说明
2020/05/03 Python
django使用graphql的实例
2020/09/02 Python
Canvas 像素处理之改变透明度的实现代码
2019/01/08 HTML / CSS
ECCO爱步加拿大官网:北欧丹麦鞋履及皮具品牌
2017/07/08 全球购物
WiFi云数码相框:Nixplay
2018/07/05 全球购物
大学生第一学年自我鉴定
2014/09/12 职场文书
win10输入法不见了只能打出字母怎么解决?
2022/08/05 数码科技