摘要:用存儲(chǔ)用戶路由守衛(wèi)路由中設(shè)置的字段就在當(dāng)中每次跳轉(zhuǎn)的路徑登錄狀態(tài)下訪問(wèn)頁(yè)面會(huì)跳到如果沒(méi)有訪問(wèn)任何頁(yè)面。一個(gè)簡(jiǎn)單的保存登錄狀態(tài)的小。
Vue項(xiàng)目中實(shí)現(xiàn)用戶登錄及token驗(yàn)證
先說(shuō)一下我的實(shí)現(xiàn)步驟:
使用easy-mock新建登錄接口,模擬用戶數(shù)據(jù)
使用axios請(qǐng)求登錄接口,匹配賬號(hào)和密碼
賬號(hào)密碼驗(yàn)證后, 拿到token,將token存儲(chǔ)到sessionStorage中,并跳轉(zhuǎn)到首頁(yè)
前端每次跳轉(zhuǎn)時(shí),就使用導(dǎo)航守衛(wèi)(vue-router.beforeEach)判斷 sessionStorage 中有無(wú) token ,沒(méi)有就跳轉(zhuǎn)到登錄頁(yè)面,有則跳轉(zhuǎn)到對(duì)應(yīng)路由頁(yè)面。
注銷后,就清除sessionStorage里的token信息并跳轉(zhuǎn)到登錄頁(yè)面
使用easy-mock模擬用戶數(shù)據(jù)我用的是easy-mock,新建了一個(gè)接口,用于模擬用戶數(shù)據(jù):
{ "error_code": 0, "data": [{ "id": "1", "usertitle": "管理員", "username": "admin", "password": "123456", "token": "@date(T)", }, { "id": "2", "usertitle": "超級(jí)管理員", "username": "root", "password": "root", "token": "@date(T)", } ] }
login.vue中寫好登陸框:
用戶名:
密碼:
然后下載axios:npm install axios --save,用來(lái)請(qǐng)求剛剛定義好的easy-mock接口:
login(){ const self = this; axios.get("https://easy-mock.com/mock/5c7cd0f89d0184e94358d/museum/login").then(response=>{ var res =response.data.data, len = res.length, userNameArr= [], passWordArr= [], ses= window.sessionStorage; // 拿到所有的username for(var i=0; i{ console.log("連接數(shù)據(jù)庫(kù)失?。?) }) }
這一步最重要的是當(dāng)賬號(hào)密碼正確時(shí),把請(qǐng)求回來(lái)的token放在sessionStorage中,
配置路由然后配置路由新加一個(gè)meta屬性:
{ path: "/", name: "login", component: login, meta:{ needLogin: false } }, { path: "/index", name: "index", component: index, meta:{ needLogin: true } }
判斷每次路由跳轉(zhuǎn)的鏈接是否需要登錄,
導(dǎo)航衛(wèi)士在main.js中配置一個(gè)全局前置鉤子函數(shù):router.beforeEach(),他的作用就是在每次路由切換的時(shí)候調(diào)用
這個(gè)鉤子方法會(huì)接收三個(gè)參數(shù):to、from、next。
to:Route:即將要進(jìn)入的目標(biāo)的路由對(duì)象,
from:Route:當(dāng)前導(dǎo)航正要離開(kāi)的路由,
next:Function:個(gè)人理解這個(gè)方法就是函數(shù)結(jié)束后執(zhí)行什么,先看官方解釋
1.next():進(jìn)行管道中的下一個(gè)鉤子。如果全部鉤子執(zhí)行完了,則導(dǎo)航的狀態(tài)就是confirmed(確認(rèn)的),
2.next(false):中斷當(dāng)前的導(dǎo)航。如果瀏覽器的url改變了(可能是用戶手動(dòng)或?yàn)g覽器后退按鈕),那么url地址會(huì)重置到from路由對(duì)應(yīng)的地址。
3.next("/")或next({path:"/"}):跳轉(zhuǎn)到一個(gè)不同的地址。當(dāng)前導(dǎo)航被中斷,進(jìn)入一個(gè)新的導(dǎo)航。
//路由守衛(wèi) router.beforeEach((to, from, next)=>{ //路由中設(shè)置的needLogin字段就在to當(dāng)中 if(window.sessionStorage.data){ console.log(window.sessionStorage); // console.log(to.path) //每次跳轉(zhuǎn)的路徑 if(to.path === "/"){ //登錄狀態(tài)下 訪問(wèn)login.vue頁(yè)面 會(huì)跳到index.vue next({path: "/index"}); }else{ next(); } }else{ // 如果沒(méi)有session ,訪問(wèn)任何頁(yè)面。都會(huì)進(jìn)入到 登錄頁(yè) if (to.path === "/") { // 如果是登錄頁(yè)面的話,直接next() -->解決注銷后的循環(huán)執(zhí)行bug next(); } else { // 否則 跳轉(zhuǎn)到登錄頁(yè)面 next({ path: "/" }); } } })
這里用了router.beforeEach vue-router導(dǎo)航守衛(wèi)
每次跳轉(zhuǎn)時(shí)都會(huì)判斷sessionStorage中是否有token值,如果有則能正常跳轉(zhuǎn),如果沒(méi)有那么就返回登錄頁(yè)面。
至此就完成了一個(gè)簡(jiǎn)單的登錄狀態(tài)了,瀏覽器關(guān)閉后sessionStorage會(huì)清空的,所以當(dāng)用戶關(guān)閉瀏覽器再打開(kāi)是需要重新登錄的
當(dāng)然也可以手動(dòng)清除sessionStorage,清除動(dòng)作可以做成注銷登錄,這個(gè)就簡(jiǎn)單了。
loginOut(){ // 注銷后 清除session信息 ,并返回登錄頁(yè) window.sessionStorage.removeItem("data"); this.common.startHacking(this, "success", "注銷成功!"); this.$router.push("/index"); }
寫一個(gè)清除sessionStorag的方法。
一個(gè)簡(jiǎn)單的保存登錄狀態(tài)的小Demo。
參考:
騰訊云社區(qū)-Vue+SessionStorage實(shí)現(xiàn)簡(jiǎn)單的登錄
SF-從前后端分別學(xué)習(xí)——注冊(cè)/登錄流程2
Vue-router實(shí)現(xiàn)單頁(yè)面應(yīng)用在沒(méi)有登錄情況下,自動(dòng)跳轉(zhuǎn)到登錄頁(yè)面
vue+axios新手實(shí)踐實(shí)現(xiàn)登陸
Vue實(shí)戰(zhàn)(四)登錄/注冊(cè)頁(yè)的實(shí)現(xiàn)
vue頁(yè)面控制權(quán)限,vuex刷新保存狀態(tài)、登錄狀態(tài)保存
vue頁(yè)面控制權(quán)限,vuex刷新保存狀態(tài)、登錄狀態(tài)保存
(vue.js)前后端分離的單頁(yè)應(yīng)用如何來(lái)判斷當(dāng)前用戶的登錄狀態(tài)?
Vue登錄注冊(cè),并保持登錄狀態(tài)
vue登錄注冊(cè)及token驗(yàn)證
Vue項(xiàng)目中實(shí)現(xiàn)用戶登錄及token驗(yàn)證
vue-router守衛(wèi)導(dǎo)航官方文檔:vue-router導(dǎo)航守衛(wèi)
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/109019.html
摘要:此文章用于記錄本人學(xué)習(xí)歷程,有共同愛(ài)好者可加好友一起分享。從上周天,由于本周有公司籃球比賽,所以耽誤兩天晚上,耗時(shí)三個(gè)晚上勉強(qiáng)做了一個(gè)登錄功能。這里的用戶信息和登錄狀態(tài)都是直接取的中的用戶信息進(jìn)行屬性值初始化。 此文章用于記錄本人VUE學(xué)習(xí)歷程,有共同愛(ài)好者可加好友一起分享。從上周天,由于本周有公司籃球比賽,所以耽誤兩天晚上,耗時(shí)三個(gè)晚上勉強(qiáng)做了一個(gè)登錄功能。中間的曲折只有自己知道,有...
摘要:我們將登錄按鈕上綁上事件,點(diǎn)擊登錄之后向服務(wù)端提交賬號(hào)和密碼進(jìn)行驗(yàn)證。所以前端和后端權(quán)限的劃分是不太一致。側(cè)邊欄最后一個(gè)涉及到權(quán)限的地方就是側(cè)邊欄,不過(guò)在前 完整項(xiàng)目地址:vue-element-admin 系列文章: 手摸手,帶你用vue擼后臺(tái) 系列一(基礎(chǔ)篇) 手摸手,帶你用vue擼后臺(tái) 系列二(登錄權(quán)限篇) 手摸手,帶你用vue擼后臺(tái) 系列三 (實(shí)戰(zhàn)篇) 手摸手,帶你用vu...
摘要:輸入框內(nèi)容過(guò)濾產(chǎn)品有一個(gè)需求是,在搜索用戶信息時(shí),只能通過(guò)郵箱搜索,并且只能輸入字母數(shù)字以及。我選擇了輸入框的值這里的坑就是需要在中更新值,因?yàn)樵剡@時(shí)才刷新。是否有一定要用的必要類似的管理系統(tǒng)涉及到不同頁(yè)面之間的交互都很少。 初始化項(xiàng)目 使用 Vue-cli3 初始化項(xiàng)目1 安裝 Element UI安裝 Vue-i18n,做相關(guān)配置2,3 原則上需要對(duì) Element 也做 I18...
摘要:在這里簡(jiǎn)單敘述一下我仿某魚部分布局以及功能實(shí)現(xiàn)的過(guò)程,僅做學(xué)習(xí)用途。另一方面,當(dāng)與現(xiàn)代化的工具鏈以及各種支持類庫(kù)結(jié)合使用時(shí),也完全能夠?yàn)閺?fù)雜的單頁(yè)面應(yīng)用提供驅(qū)動(dòng)??梢赃M(jìn)行確認(rèn)收貨后刪除訂單。 前言 每次寫文章時(shí),總會(huì)覺(jué)得比寫代碼難多了,可能這就是我表述方面的不足吧,然而寫文章也是可以復(fù)盤一下自己的開(kāi)發(fā)過(guò)程,對(duì)自己還是受益良多的。在這里簡(jiǎn)單敘述一下我仿某魚部分布局以及功能實(shí)現(xiàn)的過(guò)程,僅做...
摘要:載入前后在階段,實(shí)例的和都初始化了,但還是掛載之前為虛擬的節(jié)點(diǎn),還未替換。類似于,不同在于提交的是,而不是直接變更狀態(tài)可以包含任意異步操作。 vue基礎(chǔ) 1、 router 路由與 a 標(biāo)簽的區(qū)別:https://www.jianshu.com/p/34b...2、 VUE雙向綁定的原理: 答:VUE實(shí)現(xiàn)雙向數(shù)據(jù)綁定的原理就是利用了 Object.defineProperty() 這個(gè)...
閱讀 823·2023-04-25 20:18
閱讀 2111·2021-11-22 13:54
閱讀 2551·2021-09-26 09:55
閱讀 3916·2021-09-22 15:28
閱讀 2990·2021-09-03 10:34
閱讀 1726·2021-07-28 00:15
閱讀 1651·2019-08-30 14:25
閱讀 1292·2019-08-29 17:16