<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
在前端專案開發中,實現使用者的登陸註冊功能時常常會有一個問題,那就是我們設定的登入狀態,在瀏覽器頁面重新整理後就消失了,這其實只是因為我們沒有儲存使用者狀態。
這裡小馬演示使用的是 localStorage + vuex 方法(其他諸如 sessionStorage、cookie 等用法相同,只是功能有所區別)。
實現功能:使用者登入成功後,重新整理瀏覽器頁面或者關閉瀏覽器再次開啟網頁後,登入狀態依然保持,直到使用者點選登出。
1. 首先在 vuex 中的 state 屬性中新增一個空物件 userInfo{ } 用於儲存使用者登入後的狀態;
涉及要點:
state 屬性(狀態)用於新增多個元件共用的變數,作用類似於 vue 中的 data;
2. 在登入頁面中,判斷登入成功後建立物件 userInfo{ },並新增描述登入狀態的各屬性,然後將該物件分別存入 localStorage 和 vuex;
涉及要點:
3. 在掛載階段,判斷登入狀態 userInfo;設定相關屬性之後,就可以正常儲存登入狀態了。
因為 localStorage 為永久儲存,所以即使關閉瀏覽器再次開啟網頁登入狀態依然存在,除非手動清除 localStorage 資料;
4. 設定登出,清除 localStorage 中的資料;
5. 實現功能。
vuex(store/index.js)
import Vue from 'vue' import Vuex from 'vuex' Vue.use(Vuex) export default new Vuex.Store({ state: { userInfo:{} }, mutations: { }, actions: { }, modules: { } })
設定登入的頁面(部分程式碼,無法複製即用,僅作參考)
登入方法
//登入方法 login() { //驗證碼的驗證 var randStr = this.rand.toString().replace(/,/g, ""); //隨機生成的驗證碼為陣列形式,此處將其轉為字串並去掉中間相隔的逗號 var codeStr = this.code; //使用者輸入的驗證碼 if (randStr.toLowerCase() == codeStr.toLowerCase()) { //比較使用者輸入的與隨機生成的驗證碼,不區分大小寫 //獲取登入介面 axios.post("user/login", { name: this.name, password: this.password, administrator: this.usertyp }).then(result => { console.log(result.data); const code = result.data.code; this.token = code; if (this.token == 1003) { this.$message.error('使用者名稱或密碼未輸入!'); } else if (this.token == 1001) { this.$message.error('登入失敗,請檢查使用者名稱或者密碼是否正確。'); } else if (this.token == 1005) { this.$message.error('您不是管理員,無管理員登入許可權!'); } else if (this.token == 200) { if (this.usertyp == "2") { //管理員登入 this.$message.success('登入成功!'); this.dialogFormVisible = false; //登入成功後登入插槽關閉 this.loginReg = false;//隱藏登入註冊按鈕,顯示歡迎資訊 this.manage = true;//顯示管理員登入資訊 let userInfo = { isLogin: true, manage: true, name: this.name }; localStorage.setItem("userInfo", JSON.stringify(userInfo)); this.$store.state.userInfo = userInfo console.log('this.$store.state.userInfo', this.$store.state.userInfo) setTimeout(() => { //此處必須使用vue函數,否則this無法訪vue範例 this.$message(`歡迎您,管理員 ${this.name}!`) }, 2000); console.log(this.usertyp) } else if (this.usertyp == "") { //普通使用者 this.$message.success('登入成功!'); this.dialogFormVisible = false; //登入成功後插槽關閉 this.loginReg = false;//隱藏登入註冊按鈕,顯示歡迎資訊 this.user = true; //顯示普通使用者登入資訊 let userInfo = { isLogin: true, manage: false, name: this.name } localStorage.setItem("userInfo", JSON.stringify(userInfo)); this.$store.state.userInfo = userInfo setTimeout(() => { //此處必須使用vue函數,否則this無法訪vue範例 this.$message(`歡迎您,尊貴的晉之魂使用者 ${this.name}!`) }, 2000); console.log(this.usertyp) } this.Cookie.set("UserName", this.name); //將使用者名稱存到cookie console.log('登入狀態為:' + this.token); } }) } else { this.$message.error('請輸入正確的驗證碼'); } },
退出登入方法
//退出登入 logout() { this.Cookie.remove("UserName"); this.loginReg = true; this.manage = false; this.user = false; this.log_out = false; localStorage.clear(); setTimeout(() => { this.$router.push({ path: '/' }, () => { }, () => { });//退出登入後2秒後跳轉至首頁 }, 2000) //加()=>{},()=>{} 可解決路由重複後臺報錯問題 },
掛載階段判斷登入狀態
mounted() { // 判斷登入狀態 let userInfo = JSON.parse(localStorage.getItem('userInfo')); if (null === userInfo) return; console.log('userInfo', userInfo.isLogin); if (userInfo.isLogin) { this.dialogFormVisible = false; //登入成功後插槽關閉 this.loginReg = false;//隱藏登入註冊按鈕,顯示歡迎資訊 this.name = userInfo.name; if (userInfo.manage) { this.manage = true;//顯示管理員登入資訊 } else { this.user = true;//顯示普通使用者登入資訊 } } }
提示:小馬使用的是 vue + Element UI,使用其他技術程式碼可能不同,但思路是不變的。
到此這篇關於Vue專案如何保持使用者登入狀態的文章就介紹到這了,更多相關Vue保持使用者登入狀態內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45