您好,登錄后才能下訂單哦!
vue項(xiàng)目中使用js-cookie如何實(shí)現(xiàn)存儲(chǔ)token?針對(duì)這個(gè)問(wèn)題,這篇文章詳細(xì)介紹了相對(duì)應(yīng)的分析和解答,希望可以幫助更多想解決這個(gè)問(wèn)題的小伙伴找到更簡(jiǎn)單易行的方法。
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
4、 也可以存儲(chǔ)其他
const user = { name: 'lia', age: 18 } Cookies.set('user', user) const liaUser = JSON.parse(Cookies.get('user'))
補(bǔ)充知識(shí):vue 實(shí)現(xiàn)記住密碼功能,用戶信息在客戶端加密存儲(chǔ)
效果圖:
功能詳解:用戶登錄時(shí),勾選記住密碼,系統(tǒng)會(huì)將登錄信息存入瀏覽器cookie中,下次登錄時(shí)系統(tǒng)會(huì)自動(dòng)將信息回寫(xiě)在輸入框中(默認(rèn)設(shè)置保存時(shí)間為3天,此處需要將密碼進(jìn)行加密處理,以提高安全性)
1.定義頁(yè)面元素,v-model綁定變量
2.
3.引入vue的加密組件 CryptoJS,執(zhí)行這條命令,系統(tǒng)會(huì)自動(dòng)安裝
npm install crypto-js
安裝成功后,還需在登錄頁(yè)面引入組件
4.定義操作cookie的三個(gè)方法,后面需要用到,代碼我貼出來(lái)
/************* 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.在登錄方法中判斷記住密碼是否有被勾選,如果有,則需要將賬號(hào)密碼信息存入cookie中,沒(méi)有,則調(diào)用上面的方法清除cookie信息,關(guān)鍵步驟我已標(biāo)記,登錄方法在下面:
/************* 登錄 start ***************/ signIn() { let _this = this; //判斷是密碼登錄還是短信登錄 if (_this.indexd == 0) { _this.$refs['ruleForm'].validate((valid) => { if (valid) { //定義要存入cookie的對(duì)象 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對(duì)象中 _this.setCookie('accountInfo',accountInfo,1440*3); //傳入賬號(hào)名,密碼,和保存天數(shù)3個(gè)參數(shù)(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 //平臺(tái) if (response.data.data.currentUser.type == 0) { //平臺(tái) _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.選擇記住密碼,登錄系統(tǒng)后,可以在調(diào)試模式中查看cookie信息,如圖:
6.退出系統(tǒng)后,需要判斷cookie有無(wú)賬號(hào)信息,如果有,則進(jìn)行回寫(xiě),下面是我的方法:
在鉤子方法中調(diào)用下面的loadAccountInfo回寫(xiě)方法
//預(yù)讀取cookie中用戶信息 loadAccountInfo(){ let self = this; //admin%26U2FsdGVkX1+/ZtAGWFVi37gNwA7TUZmQM+yazInCPxs%3D let accountInfo = self.getCookie('accountInfo'); //如果cookie里沒(méi)有賬號(hào)信息 if(Boolean(accountInfo) == false){ console.log('cookie中沒(méi)有檢測(cè)到用戶賬號(hào)信息!'); return false; } else{ //如果cookie里有賬號(hào)信息 console.log('cookie中檢測(cè)到賬號(hào)信息!現(xiàn)在開(kāi)始預(yù)填寫(xiě)!'); 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'); //拿到解密后的密碼(登錄時(shí)輸入的密碼) var newpassWord = bytes.toString(CryptoJS.enc.Utf8); self.form.name = userName; self.form.pwd = newpassWord; self.checked = true; } },
7.最后效果就是這樣
關(guān)于vue項(xiàng)目中使用js-cookie如何實(shí)現(xiàn)存儲(chǔ)token問(wèn)題的解答就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,如果你還有很多疑惑沒(méi)有解開(kāi),可以關(guān)注億速云行業(yè)資訊頻道了解更多相關(guān)知識(shí)。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。