欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

vue项目中js-cookie的使用存储token操作

程序员文章站 2022-04-06 14:11:28
1、安装js-cookie# npm install js-cookie --save# yarn add js-cookie2、引用(需要的文件)import cookies from 'js-co...

1、安装js-cookie

# npm install js-cookie --save

# yarn add js-cookie

2、引用(需要的文件)

import cookies from 'js-cookie' 
const tokenkey = 'admin-token' 
export function gettoken() {
 return cookies.get(tokenkey)
}
 
export function settoken(tcuncuoken) {
 return cookies.set(tokenkey, token)
}
 
export function removetoken() {
 return cookies.remove(tokenkey)
}

3、浏览器cookie

vue项目中js-cookie的使用存储token操作

4、 也可以存储其他

const user = {
 name: 'lia',
 age: 18
}
cookies.set('user', user)
const liauser = json.parse(cookies.get('user'))

补充知识:vue 实现记住密码功能,用户信息在客户端加密存储

效果图:

vue项目中js-cookie的使用存储token操作

功能详解:用户登录时,勾选记住密码,系统会将登录信息存入浏览器cookie中,下次登录时系统会自动将信息回写在输入框中(默认设置保存时间为3天,此处需要将密码进行加密处理,以提高安全性)

1.定义页面元素,v-model绑定变量

vue项目中js-cookie的使用存储token操作

2.

vue项目中js-cookie的使用存储token操作

3.引入vue的加密组件 cryptojs,执行这条命令,系统会自动安装

npm install crypto-js

安装成功后,还需在登录页面引入组件

vue项目中js-cookie的使用存储token操作

4.定义操作cookie的三个方法,后面需要用到,代码我贴出来

 /************* cookie start ***************/
   clearcookie(cookiename) {
    var exp = new date();
    exp.settime(exp.gettime() - 1);
    var cval = this.getcookie(cookiename);
    if (cval != null) {
     document.cookie = cookiename + "=" + cval + ";expires=" + exp.togmtstring();
    }
   },
 
   setcookie(cookiename, value, expiremminutes) {
    var exdate = new date();
    exdate.settime(exdate.gettime() + expiremminutes * 60 * 1000);
    document.cookie = cookiename + "=" + escape(value) + ((expiremminutes == null) ? "" : ";expires=" + exdate.togmtstring());
   },
 
   getcookie(cookiename) {
    if (document.cookie.length > 0) {
     var c_start = document.cookie.indexof(cookiename + "=");
     if (c_start != -1) {
      c_start = c_start + cookiename.length + 1;
      var c_end = document.cookie.indexof(";", c_start);
      if (c_end == -1)
       c_end = document.cookie.length
      return unescape(document.cookie.substring(c_start, c_end))
     }
    }
    return ""
   },
   /*************cookie end***************/

5.在登录方法中判断记住密码是否有被勾选,如果有,则需要将账号密码信息存入cookie中,没有,则调用上面的方法清除cookie信息,关键步骤我已标记,登录方法在下面:

vue项目中js-cookie的使用存储token操作

/************* 登录 start ***************/
   signin() {
    let _this = this;
    //判断是密码登录还是短信登录
    if (_this.indexd == 0) {
     _this.$refs['ruleform'].validate((valid) => {
      if (valid) {
 
       //定义要存入cookie的对象
       var accountinfo = ""; 
       //拿到输入框中的密码,使用aes加密
       var pwd = _this.form.pwd;
       var newpwd = cryptojs.aes.encrypt(pwd,'secret key 123'); 
 
       //若勾选记住密码
       if (_this.checked == true) {
        console.log("选择记住密码,checked == true");
        accountinfo = _this.form.name + "&" + newpwd; //将加密后的密码存入cookie对象中
        _this.setcookie('accountinfo',accountinfo,1440*3); //传入账号名,密码,和保存天数3个参数(3天)
       }else {
        console.log("清空cookie");
        _this.clearcookie('accountinfo'); //清空cookie
       }
 
 
       let params = {
        "username": _this.form.name,
        "password": _this.form.pwd,
        "vcode": _this.form.imgcode,
        "logintoken": _this.logintoken,
       };
       post('/login/login', params).then(function (response) {
        if (response.data.code == "20000") {
         sessionstorage.setitem("v-token", response.data.data.token);
         sessionstorage.setitem("v-menu", json.stringify(response.data.data.routers));
         sessionstorage.setitem("v-user", json.stringify(response.data.data.currentuser));
         //_this.makerouters(response.data.data.routers);
         _this.$message({
          message: '登录成功',
          type: 'success'
         });
         _this.clearcookie("login_token");//清除token
         //平台
         if (response.data.data.currentuser.type == 0) {
          //平台
          _this.$router.push('/index');
         } else if (response.data.data.currentuser.type == 1 || response.data.data.currentuser.type == 3 || response.data.data.currentuser.type == 2) {
          //渠道商
          _this.$router.push('/operate');
         } else {
          //证券商
          _this.$router.push('/aoinformationmanagement')
         }
 
        } else if (response.data.code == "50000") {
         _this.$message.warning(response.data.msg);
         _this.changecode();
        }
       }).catch(function (err) {
        _this.$message.error(err);
        _this.changecode();
       })
      }
     });
    } 
   }

5.选择记住密码,登录系统后,可以在调试模式中查看cookie信息,如图:

vue项目中js-cookie的使用存储token操作

6.退出系统后,需要判断cookie有无账号信息,如果有,则进行回写,下面是我的方法:

在钩子方法中调用下面的loadaccountinfo回写方法

vue项目中js-cookie的使用存储token操作

//预读取cookie中用户信息
   loadaccountinfo(){
    let self = this;
    //admin%26u2fsdgvkx1+/ztagwfvi37gnwa7tuzmqm+yazincpxs%3d
    let accountinfo = self.getcookie('accountinfo');
 
    //如果cookie里没有账号信息
    if(boolean(accountinfo) == false){
     console.log('cookie中没有检测到用户账号信息!');
     return false;
    } else{
     //如果cookie里有账号信息
     console.log('cookie中检测到账号信息!现在开始预填写!');
     let username = "";
     let password = "";
     let index = accountinfo.indexof("&");
 
     username = accountinfo.substring(0,index);
     password = accountinfo.substring(index+1);  //拿到加密后的密码
     //解密
     var bytes = cryptojs.aes.decrypt(password.tostring(),'secret key 123');
     //拿到解密后的密码(登录时输入的密码)
     var newpassword = bytes.tostring(cryptojs.enc.utf8);
 
     self.form.name = username;
     self.form.pwd = newpassword;
     self.checked = true;
    }
   },

7.最后效果就是这样

vue项目中js-cookie的使用存储token操作

以上这篇vue项目中js-cookie的使用存储token操作就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。