Vue3 路由守衛與權限路由怎麼設計提示詞(導航守衛流程、動態路由、Pinia 登入態、刷新後 404)

用 Vue 3 做後台或帶登入的站點,要按角色顯示不同選單和頁面時用。填入登入方式、權限來源和路由清單,AI 給出路由分層、全局守衛的判斷流程、刷新後恢復登入態與動態路由的辦法,以及退出登入時的清理代碼。

NNathaniel bigo··原創首發·AI 輔助撰寫
通用大模型 對話模型通用
你是熟悉 Vue 3 全家桶的前端負責人。我要做(或修)一套「登入態 + 權限路由」,請按下面的順序給方案。

【項目資訊】
Vue 與 Vue Router 版本:[Vue 與 Router 版本]
登入與令牌方式:[登入與令牌方式]
權限數據從哪來:[權限來源](例:登入後接口返回角色碼和可訪問選單)
路由清單:[路由清單]
目前遇到的問題(可選):[現有問題]

【要你給的東西】
一、路由分層。哪些是不需要權限的靜態路由(登入頁、錯誤頁),哪些要等拿到權限後用 addRoute 動態添加;每條路由的 meta 裏放什麼(是否公開、所需權限碼、標題)。

二、全局前置守衛的判斷流程。用編號寫成決策步驟,依次覆蓋:目標是公開頁;沒有令牌;有令牌但用戶資訊和動態路由還沒加載;加載失敗;已加載但無權訪問;已登入又訪問登入頁。每一步寫清返回什麼(放行、重定向到哪、帶不帶回跳地址)。

三、刷新後的恢復。Pinia 的狀態存在內存裏,刷新即清空,請說明:令牌存在哪裏以及各自的風險;動態路由如何在刷新後的第一次導航裏重新添加;為什麼通配的 404 路由要放到動態路由之後再加,否則刷新會直接落到 404。

四、退出登入與切換帳號。怎樣移除已添加的動態路由、重置 store,避免上一個帳號的選單殘留。

五、代碼。給出守衛、用戶 store、動態路由生成三段關鍵代碼;要求在守衛函數內部獲取 store,不要在模組頂層獲取。

六、邊界提醒。明確寫出:前端路由控制只是體驗層,每個接口必須在服務端各自校驗權限;按鈕級的顯示隱藏同理。

Router 的寫法以我所用版本的官方文檔為準,版本間有差異的地方標「需核對」。

高亮處換成你自己的內容:[Vue 與 Router 版本]、[登入與令牌方式]、[權限來源]、[路由清單]、[現有問題]

ChatGPT Plus 充值

已被複製 0 次

使用說明

怎麼填變量:[權限來源] 決定了動態路由怎麼生成:後端直接返回選單樹,就把選單映射成路由記錄;後端只返回角色碼或權限碼,就在前端維護一份完整路由表再按權限碼過濾。[路由清單] 列出路徑和誰能看即可,如「/orders 運營、管理員;/finance 僅管理員」。[現有問題] 寫現象,例如「刷新後白屏」「切換帳號還能看到上一個人的選單」。

常見問題與調整:

  • 刷新後進了 404 → 追問:「按我的代碼檢查通配路由的添加時機,以及守衛裏添加完動態路由後是否重新導航到了原地址。」
  • 守衛裏出現無限重定向 → 追問:「逐步推演未登入用戶訪問 /orders 時守衛每次的返回值,找出循環發生在哪一步。」
  • 還要控制按鈕 → 追問:「補一個按權限碼控制元素顯示的自定義指令,並說明它不能代替接口鑑權。」

示例輸出

示例,僅供參考(後端返回權限碼,前端按權限碼過濾路由,守衛節選)

判斷流程:公開頁直接放行 → 沒有令牌則去登入頁並帶上回跳地址 → 有令牌但路由未加載,先加載並添加,再重新導航 → 其餘放行。

ts
router.beforeEach(async (to) => {
  const user = useUserStore()                 // 在守衛內部獲取 store
  if (to.meta.public) return true
  if (!user.token) return { path: '/login', query: { redirect: to.fullPath } }
  if (!user.routesLoaded) {
    const routes = await user.loadRoutes()    // 拉取權限並生成路由記錄
    routes.forEach((r) => router.addRoute('layout', r))
    return to.fullPath                        // 重新走一次導航,讓新路由生效
  }
  return true
})

注意:loadRoutes 失敗(如令牌過期)時要清掉令牌並跳登入頁,否則會在這裏反覆重試;404 通配路由在動態路由添加完之後再加。

同款作品

用這條提示詞做出來的作品;原作者會因此獲得積分

做同款

還沒有同款,來做第一個。

Nathaniel 的更多內容

同主題

同模型

0 條評論

登入 後參與評論

還沒有評論,來搶沙發~