15前端項目----用戶信息/導航守衛

登錄/注冊

    • 持久存儲用戶信息
      • 問題
    • 退出登錄
    • 導航守衛
    • 解決問題

持久存儲用戶信息

  • 本地存儲:(在actions中請求成功時)
    添加localStorage.setItem('token',result.data.token);
  • 獲取存儲:(在user倉庫中,state中token初始值設為localStorage.getItem('token')

    首先當本地存儲沒有值為null,倉庫中token初始值也為null
    一旦登錄派發action,那么本地存儲就會有值,而此時倉庫的token也是有相同值
    那么當一刷新,倉庫數據token會首先找到本地存儲的token值作為初始值

問題

  1. 跳轉到其他組件search時,Header又變成未登錄狀態
  • 原因:
    因為只是在home組件中派發了action,search組件并未派發,那么就獲取不到用戶信息

  • 解決:

  1. 在所有組件添加上?不夠好。
  2. 放在App組件只執行一次?不行,
    app一掛載就執行派發任務,但是還沒登錄呢,自然是獲取不到的,可是即便是登陸完了也是獲取不到,app早就掛載完了。只能第二次打開頁面才會呈現已登錄狀態。
  1. 用戶登錄完,還能再次進入login路由組件進行登錄嗎?不應該

退出登錄

  • 業務
    1. 需要發請求,通知服務器退出登錄【清除token數據】
    2. 清除項目用到的數據【userInfo,token】
  1. api+vuex
//actions
async userLogout({ commit },) {//向服務器發送一次請求,清除服務器的tokenlet result = await reqLogout();if (result.code == 200) {//清除state數據---提交給mutaions//注意:actions里面不能處理statecommit('CLEAR');return 'ok';}else{return Promise.reject(new Error('fail'));}}//mutaions
CLAER(state){state.token = '';state.userInfo = {};//清除本地存儲tokenlocalStorage.removeItem('token');
}
  1. 派發action
    退出登錄綁定@click="logout"
//method
async logout(){try{await this.$store.dispatch('userLogout');//跳轉到首頁this.$router.push('/home');}catch(error){alert(error.message);}
}

問題如果在search組件頁面中點擊退出登錄,路由應該跳轉到首頁。所有actions中需要返回成功與失敗結果,判斷是否跳轉

導航守衛

  • 導航守衛:
    是 Vue Router 提供的一種機制,主要用于在路由導航過程中進行控制和管理。它允許你在路由發生變化時執行一些操作,如權限驗證、數據預加載、頁面訪問控制等。

  • 導航守衛的三種類型:
    1. 全局守衛:只要路由發生變化,守衛就能監聽到并且攔截住
    (1) router.beforeEach - 全局前置守衛
    (2) router.beforeResolve - 全局解析守衛
    (3) router.afterEach - 全局后置鉤子
    2. 路由獨享守衛
    3. 組件內守衛

  • 全局守衛 router.beforeEach((to,from,next)=>{}):

    • to:跳轉的目的路由信息(如下圖在這里插入圖片描述
    • from:當前路由信息(從哪個路由跳轉的)
    • next:放行函數
      • next():直接放行
      • next(‘/login’):放行到指定路由
      • next(false)

解決問題

  1. 用戶登錄了,不能在進入login
  2. 路由跳轉其他頁面同樣需要用戶信息展示

判斷倉庫中是否拿到token,如果有則說明登錄了

在router配置中

//引入store
import store from '@/store';
const router = new VueRouter({……});//全局路由守衛
router.beforeEach(async (from,to,next)=>{let token = store.user.token;if(token){//登錄成功//判斷如果to是login則不允許放行,register也同樣不允許if(to.path=='/login' || to.path=='/register'){//停留在home首頁next('/home');}else{//登錄成功,但跳轉的不是login//【home\search\detail……】//這里可以派發actions,獲取用戶信息//判斷有沒有獲取用戶信息if(name){//已經有用戶信息了next();}else{//沒有try{await store.dispatch('getUserInfo');next();}catch(error){alert(error.message);//token無效,跳到登錄頁再次登錄//發送請求userLogout清除服務器token(清除用戶信息和本地存儲token的業務mutaions也一并完成了)await store.dispatch('userLogout');next('/login');}}}}else{//未登錄后期再解決,還需開發別的頁面next();}
})

① 路由守衛關注有沒有token(有沒有登錄),有沒有獲取信息(派發getUserInfo)
② 請求不到用戶信息,說明token無效(過期了),則清除token,跳到登錄頁,重新登錄
③ 沒有token,一定沒有用戶信息;有用戶信息則放行所有

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/82195.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/82195.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/82195.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

RSS 2025|斯坦福提出「統一視頻行動模型UVA」:實現機器人高精度動作推理

導讀 在機器人領域,讓機器人像人類一樣理解視覺信息并做出精準行動,一直是科研人員努力的方向。今天,我們要探討的統一視頻行動模型(Unified Video Action Model,UVA),就像給機器人裝上了一個“…

基于論文的大模型應用:基于SmartETL的arXiv論文數據接入與預處理(四)

上一篇介紹了基于SmartETL框架實現arxiv采集處理的基本流程,通過少量的組件定制開發,配合yaml流程配置,實現了復雜的arxiv采集處理。 由于其業務流程復雜,在實際應用中還存在一些不足需要優化。 5. 基于Kafka的任務解耦設計 5.…

Fiori學習專題三十五:Device Adaptation

由于在類似于手機的小面板上顯示時&#xff0c;我們為了留出更多空間展示數據&#xff0c;可以將一些控件折疊。 1.修改HelloPanel.view.xml&#xff0c;加入expandable“{device>/system/phone}” expanded"{ !${device>/system/phone} <mvc:ViewcontrollerNam…

【記錄】HunyuanVideo 文生視頻工作流

HunyuanVideo 文生視頻工作流指南 概述 本指南詳細介紹如何在ComfyUI中使用騰訊混元HunyuanVideo模型進行文本到視頻生成的全流程操作&#xff0c;包含環境配置、模型安裝和工作流使用說明。 參考&#xff1a;https://comfyui-wiki.com/zh/install/install-comfyui/install-c…

統一返回JsonResult踩坑

定義了一個統一返回類&#xff0c;但是沒有給Data 導致沒有get/set方法&#xff0c;請求一直報錯 public class JsonResult<T> {private int code;private String message;private T data;public JsonResult() {}public JsonResult(int code, String message, T data) {…

dubbo-token驗證

服務提供者過濾器 import java.util.Map; import java.util.Objects;/*** title ProviderTokenFilter* description 服務提供者 token 驗證* author zzw* version 1.0.0* create 2025/5/7 22:17**/ Activate(group CommonConstants.PROVIDER) public class ProviderTokenFilt…

沃倫森電氣高壓動態無功補償裝置助力企業電能優化

在工業生產的復雜電能環境中&#xff0c;電能質量直接影響企業的生產效率和運營成本。XX光伏科技有限公司作為一家快速發展的制造企業&#xff0c;隨著生產規模的不斷擴大&#xff0c;其內部電網面臨功率因數過低、電壓波動頻繁等問題&#xff0c;導致供電部門罰款增加、設備故…

基于EFISH-SCB-RK3576工控機/SAIL-RK3576核心板的網絡安全防火墻技術方案?(國產化替代J1900的全棧技術解析)

?基于EFISH-SCB-RK3576/SAIL-RK3576的網絡安全防火墻技術方案? &#xff08;國產化替代J1900的全棧技術解析&#xff09; ?一、硬件架構設計? ?流量處理核心模塊? ?多核異構架構?&#xff1a; ?四核Cortex-A72&#xff08;2.3GHz&#xff09;?&#xff1a;處理深度…

Maven 動態版本與SNAPSHOT機制詳解

&#x1f9d1; 博主簡介&#xff1a;CSDN博客專家&#xff0c;歷代文學網&#xff08;PC端可以訪問&#xff1a;https://literature.sinhy.com/#/?__c1000&#xff0c;移動端可微信小程序搜索“歷代文學”&#xff09;總架構師&#xff0c;15年工作經驗&#xff0c;精通Java編…

趣味編程:答案之書

概述&#xff1a;該篇博客主要介紹的是曾經一度風靡全網的答案之書小程序。 目錄 1. 效果展示 2. 源碼展示 3. 代碼邏輯詳解 3.1 頭文件與全局變量 3.2 main函數 3.3 主循環 3. 4 繪制界面 4. 運行問題 5.小結 1. 效果展示 該小程序是動態的效果&#xff0c; 因此實…

多線程初階(2)

說到多線程編程&#xff0c;一定少不了線程安全這個話題。我們前面了解了線程的原理以及線程與進程的關系。線程之間共享資源&#xff0c;這就代表了在多線程編程中一定會產生沖突&#xff0c;所以我們需要在敲代碼時保證線程安全&#xff0c;避免這樣的問題發生。 我們先看一…

【Ubuntu】安裝向日葵遠程控制

前言 在Ubuntu 24.04.2下安裝向日葵遠程控制出錯&#xff0c;少了一些依賴&#xff0c;需要安裝一些依賴。 1.安裝gconf2-common wget http://mirrors.kernel.org/ubuntu/pool/universe/g/gconf/gconf2-common_3.2.6-6ubuntu1_all.deb sudo dpkg -i gconf2-common_3.2.6-6ub…

【Python開源】深度解析:一款高效音頻封面批量刪除工具的設計與實現

&#x1f3b5; 【Python開源】深度解析&#xff1a;一款高效音頻封面批量刪除工具的設計與實現 &#x1f308; 個人主頁&#xff1a;創客白澤 - CSDN博客 &#x1f525; 系列專欄&#xff1a;&#x1f40d;《Python開源項目實戰》 &#x1f4a1; 熱愛不止于代碼&#xff0c;熱情…

JAVA房屋租售管理系統房屋出租出售平臺房屋銷售房屋租賃房屋交易信息管理源碼

一、源碼描述 這是一套房屋租售管理源碼&#xff0c;基于SpringBootVue框架&#xff0c;后端采用JAVA開發&#xff0c;源碼功能完善&#xff0c;涵蓋了房屋租賃、房屋銷售、房屋交易等業務。 二、源碼截圖

一篇文章講清楚mysql的聚簇索引、非聚簇索引、輔助索引

聚簇索引與非聚簇索引最大的區別就是&#xff1a; 聚簇索引的索引和數據是存放在一起的&#xff0c;都是在葉子結點&#xff1b; 非聚簇索引的索引和數據是分開存儲的&#xff0c;葉子節點存放的是索引和指向數據文件的地址&#xff0c;通過葉子節點找到索引&#xff0c;再通…

使用ESPHome燒錄固件到ESP32-C3并接入HomeAssistant

文章目錄 一、安裝ESPHome二、配置ESP32-C3控制燈1.主配置文件esp32c3-luat.yaml2.基礎通用配置base.yaml3.密碼文件secret.yaml4.圍欄燈four_light.yaml5.彩燈rgb_light.yaml6.左右柱燈left_right_light.yaml 三、安裝固件四、HomeAssistant配置ESPHome1.直接訪問2.配置ESPHom…

什么是變量提升?

變量提升&#xff08;Hoisting&#xff09; 是 JavaScript 引擎在代碼執行前的一個特殊行為&#xff0c;它會將變量聲明和函數聲明自動移動到當前作用域的頂部。但需要注意的是&#xff0c;只有聲明會被提升&#xff0c;賦值操作不會提升。 ??核心概念?? 變量聲明提升&…

【萬字長文】深入淺出 LlamaIndex 和 LangChain:從RAG到智能體,輕松駕馭LLM應用開發

Langchain系列文章目錄 01-玩轉LangChain&#xff1a;從模型調用到Prompt模板與輸出解析的完整指南 02-玩轉 LangChain Memory 模塊&#xff1a;四種記憶類型詳解及應用場景全覆蓋 03-全面掌握 LangChain&#xff1a;從核心鏈條構建到動態任務分配的實戰指南 04-玩轉 LangChai…

2025 后端自學UNIAPP【項目實戰:旅游項目】3、API接口請求封裝,封裝后的簡單測試以及實際使用

一、創建請求封裝目錄 選中自己的項目&#xff0c;右鍵鼠標---->新建---->目錄---->名字自定義【我的是api】 二、創建兩個js封裝文件 選中封裝的目錄&#xff0c;右鍵鼠標---->新建---->js文件---->名字自定義【我的兩個js文件分別是my_http和my_api】 三…

autojs和冰狐智能輔助該怎么選擇?

最近打算做自動化腳本&#xff0c;在autojs和冰狐智能輔助中做選擇&#xff0c;不知道該怎么選。沒辦法只能花費大量時間仔細研究了autojs和冰狐智能輔助&#xff0c;綜合考慮功能需求、開發復雜度、編程經驗及項目規模等因素。以下是兩者的核心對比及選擇建議&#xff0c;僅供…