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

使用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类型)得先转成字符串

更多使用请访问官方文档

记住密码

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

其中保存使用setcookie方法,取出则使用getcookie方法。
ok,我们来编写方法

//设置cookiesetCookie(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();},//读取cookiegetCookie: 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);} else if (arr2[0] == "password") {// Decrypt,将解密后的内容赋值给密码var bytes = CryptoJS.AES.decrypt(arr2[1], "secretkey123");this.password = bytes.toString(CryptoJS.enc.Utf8);}}}},//清除cookieclearCookie: function() {this.setCookie("", "", -1); }

登录的方法如下:

 login() {this.$http //请根据实际情况修改该方法.post(...).then(res => {if (res.data.code == "success") {if (this.rememberPsw == true) {//判断用户是否勾选了记住密码选项rememberPsw,传入保存的账号currentPortId,密码password,天数30this.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值啦。

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/406823.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux:编译生成内核模块(来自国嵌的视频教学)

内核模块的代码文件 文件 yyyy.c &#xff08;yyyy可以与模块xxxx同名也可以不同名&#xff09; &#xff08;类似模板的东西&#xff09; #ifndef __KERNEL__ #define __KERNEL__ #endif #ifndef MODULE //直接添加到内核时去掉&#xff0c;生成模块时保留 #d…

iOS开发UI篇—实现一个私人通讯录小应用(二)

一、实现功能说明 &#xff08;1&#xff09;点击注销按钮&#xff0c;弹出一个对话框&#xff0c;点击确定后移除当前栈顶的控制器&#xff0c;返回开始界面&#xff0c;点击取消&#xff0c;不做任何操作。 注意&#xff1a;注销按钮的单击事件已经进行了连线。实现-(void)ac…

IIS内部错误:500之解决方案

将自己很早以前做的一个asp.net网站从自己的笔记本上迁移到公司电脑上&#xff0c;在作好相关配置后&#xff0c;打开网站首页&#xff0c;出现HTTP500错误&#xff0c;上网查了发现这是服务器内部错误。 接着我查看了下系统事件日志信息&#xff0c;发现了错误: 服务器无法加…

AGPM(高级组策略管理)3.0之二操作

续AGPM&#xff08;高级组策略管理 &#xff09;3.0之一部署。1、设置默认AGPM服务器打开组策略管理控制台&#xff08;GPMC.MSC&#xff09;&#xff0c;打开默认的Default Domain Policy进行编辑。打开用户配置、策略、管理模板、Windows 组件、AGPM&#xff0c;进行如下设置…

Linux:串口通信

以前跟着做过VxWorks的开发&#xff0c;主要通信方式是串口&#xff0c;因为底层BSP包已经做好了&#xff0c;串口通信非常简单。后来接触Linux&#xff0c;在一块OK6410上跑Linux串口通信&#xff0c;才发现原来天真的以为甚是简单的串口变得如此的不简单。 #include <ter…

结合netstat和awk命令来统计网络连接数

结合netstat和awk命令来统计网络连接数netstat -n | awk /^tcp/ {state[$NF]} END {for(key in state) print key,"\t",state[key]}会得到类似下面的结果&#xff0c;具体数字会有所不同&#xff1a;LAST_ACK 1SYN_RECV 14ESTABLISHED 79FIN_WAIT1 28FIN_WAIT2 3CLOS…

屏幕实战效果解析:IPS/TFT/AMOLED/SLCD

现在手机市场上&#xff0c;智能手机种类繁多&#xff0c;手机屏幕材质也是五花八门。对于一般消费者来说&#xff0c;一款手机是否值得购买&#xff0c;除了关心它的硬件参数以外&#xff0c;更重要的一点就是看它的屏幕。除了屏幕尺寸以外&#xff0c;影响着大家对该手机的第…

结构体继承自结构体

C Code: /*功能&#xff1a;结构体继承自结构体结论&#xff1a;1. 结构体可以继承自结构体2. 结构体同样有构造函数和析构函数*/#include <iostream>using namespace std;struct MNode{int val;MNode(){val 10;cout<<"MNode(): "<<val<<e…

非对称加密算法(公钥和私钥)

非对称加密算法需要两个密钥来进行加密和解密&#xff0c;这两个秘钥是公开密钥&#xff08;public key&#xff0c;简称公钥&#xff09;和私有密钥&#xff08;private key&#xff0c;简称私钥&#xff09;。 公钥&#xff08;Public Key&#xff09;与私钥&#xff08;Pri…

Linux:定时器

引子&#xff1a;使用OK6410 通过 IMU_EV30 采集 ADIS16405 的数据&#xff0c;采集频率为100Hz&#xff0c;需要10ms的定时器。首先考虑了a POSIX per-process timer&#xff0c;后发现板子负担轻的时候还行&#xff0c;负担重了定时很不精确&#xff0c;最后使用PWM定时器解决…

RHEL5+Postfix+MySql+IMAP+MailDrop+ExtMail(5)

十三、安装Extman-0.2.2<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" />1、安装及基本配置#tar zxvf extman-0.2.2.tar.gz# mv extman-0.2.2 /var/www/extsuite/extman修改配置文件以符合本例的需要&#xff1a;# vim /var/www…

如何解决Android SDK无法下载Package的问题(.net)

有些用户在安装好Android SDK后&#xff0c;打开Android SDK Manager下载API时一直显示“Done loading packages”却迟迟不能前进&#xff0c;界面显示的Package空空如也。自己也出现了这种情况&#xff0c;于是乎&#xff0c;把自己成功解决此问题的方法分享给大家。 如何解决…

C# 中 for和foreach 性能比较,提高编程性能

From: http://www.cnblogs.com/yzxchoice/archive/2007/12/15/995949.html 在很多情况下for和foreach具有同样的功能,选择for还是foreach很多人可能都是看自己的喜好&#xff0c;本测试试图通过 来真是测试数据来比较他们的执行效率。希望能给大家对他们的时候带来一些帮助。 …

AES与RSA混合加密完整实例

前段时间看到一篇文章讲如何保证API调用时数据的安全性&#xff08;传送门&#xff1a;https://blog.csdn.net/ityouknow/article/details/80603617&#xff09;&#xff0c;文中讲到利用RSA来加密传输AES的秘钥&#xff0c;用AES来加密数据&#xff0c;并提供如下思路&#xf…

Linux: 两个USB摄像头的数据采集问题

引子&#xff1a; 课题需要&#xff0c;同时采集两个摄像头数据&#xff0c;频率不高&#xff0c;但要同时。中间遇到的问题&#xff0c;唉一言难尽啊&#xff01; 为了图省事使用UVC摄像头&#xff0c;但是板子是USB1.1接口的&#xff0c;故挑选兼容USB1.1的UVC驱动的摄像头&…

获取指定日期的常用前后节点(月初月末周一周末等等)

获取指定日期的常用前后节点&#xff08;月初月末周一周末等等&#xff09; 原文:获取指定日期的常用前后节点&#xff08;月初月末周一周末等等&#xff09;注&#xff1a;周节点方面是根据中国习惯&#xff0c;视周一为起&#xff0c;周日为末。 /*-------------------------…