更新時間:2023年09月19日10時43分 來源:傳智教育 瀏覽次數(shù):
具體思路:
登錄成功后,服務(wù)端會返回一個token(該token的是一個能唯一標(biāo)示用戶身份的一個key),之后我們將token存儲在本地cookie之中,這樣下次打開頁面或者刷新頁面的時候能記住用戶的登錄狀態(tài),不用再去登錄頁面重新登錄了。
ps:為了保證安全性,我司現(xiàn)在后臺所有token有效期(Expires/Max-Age)都是Session,就是當(dāng)瀏覽器關(guān)閉了就丟失了。重新打開游覽器都需要重新登錄驗證,后端也會在每周固定一個時間點重新刷新token,讓后臺用戶全部重新登錄一次,確保后臺用戶不會因為電腦遺失或者其它原因被人隨意使用賬號。
用戶登錄成功之后,我們會在全局鉤子router.beforeEach中攔截路由,判斷是否已獲得token,在獲得token之后我們就要去獲取用戶的基本信息了。
頁面會先從 cookie 中查看是否存有 token,沒有,就走一遍上一部分的流程重新登錄,如果有token,就會把這個 token 返給后端去拉取user_info,保證用戶信息是最新的。當(dāng)然如果是做了單點登錄得功能的話,用戶信息存儲在本地也是可以的。當(dāng)你一臺電腦登錄時,另一臺會被提下線,所以總會重新登錄獲取最新的內(nèi)容。
先說一說我權(quán)限控制的主體思路,前端會有一份路由表,它表示了每一個路由可訪問的權(quán)限。當(dāng)用戶登錄之后,通過token獲取用戶的role,動態(tài)根據(jù)用戶的role算出其對應(yīng)有權(quán)限的路由,再通過 router.addroutes動態(tài)掛載路由。但這些控制都只是頁面級的,說白了前端再怎么做權(quán)限控制都不是絕對安全的,后端的權(quán)限驗證是逃不掉的。
通過前端來控制頁面級的權(quán)限,不同權(quán)限的用戶顯示不同的側(cè)邊欄和限制其所能進入的頁面(也做了少許按鈕級別的權(quán)限控制),后端則會驗證每一個涉及請求的操作,驗證其是否有該操作的權(quán)限,每一個后臺的請求不管是 get 還是 post 都會讓前端在請求header里面攜帶用戶的token,后端會根據(jù) 該token來驗證用戶是否有權(quán)限執(zhí)行該操作。若沒有權(quán)限則拋出一個對應(yīng)的狀態(tài)碼,前端檢測到該狀態(tài)碼,做出相對應(yīng)的操作。
使用vuex管理路由表,根據(jù)vuex中可訪問的路由渲染側(cè)邊欄組件。
具體實現(xiàn):
創(chuàng)建vue實例的時候?qū)ue-router掛載,但這個時候vue-router掛載一些登錄或者不用權(quán)限的公用的頁面。
當(dāng)用戶登錄后,獲取用role,將role和路由表每個頁面的需要的權(quán)限作比較,生成最終用戶可訪問的路由表。
調(diào)用router.addRoutes(store.getters.addRouters)添加用戶可訪問的路由。
使用vuex管理路由表,根據(jù)vuex中可訪問的路由渲染側(cè)邊欄組件。