最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

vue系列之動態(tài)路由詳解【原創(chuàng)】

 更新時間:2017年09月10日 08:45:20   作者:一半水一半冰  
下面小編就為大家?guī)硪黄獀ue系列之動態(tài)路由詳解【原創(chuàng)】。小編覺得挺不錯的,現(xiàn)在就想給大家,也給大家做個參考。一起跟隨小編過來看看吧

開題

最近用vue來構(gòu)建了一個小項目,由于項目是以iframe的形式嵌套在別的項目中的,所以對于登錄的驗證就比較的麻煩,索性后端大佬們基于現(xiàn)在的問題提出了解決的方案,在看到他們的解決方案之前,我先畫了一個比較標準的單系統(tǒng)的解決方案。

本文目錄:

一: 設想
二: 討論
三:實現(xiàn)
四:總結(jié)

一: 設想

簡單解釋下上圖就是:

首先前端從cookie獲取token,如果沒有token就跳轉(zhuǎn)到登錄頁面登錄,登錄驗證之后生成token存在數(shù)據(jù)庫中并返回給前端;前端將這個token保存下來,為了讓在瀏覽器新的tab頁時不需要登錄,我們前端需要將這個token保存到cookie之中。

如果用戶已經(jīng)有了token,那么再驗證是否有用戶信息,如果沒有去請求用戶信息的接口,后臺讀取用戶的基本信息返回給前端,前端根據(jù)后臺返回的用戶權(quán)限生成固定的路由表用于頁面攔截。

在用戶token和權(quán)限都有的情況下,進入自己權(quán)限內(nèi)的頁面并且攜帶token訪問后臺進行交互。

用戶在退出時,請求后臺接口,清除token數(shù)據(jù)。

二: 討論

由于公司的項目更加的復雜,屬于基于原來的系統(tǒng)開發(fā)新的系統(tǒng)模塊,但是這些模塊又為了以后主體功能的更新下次迭代需要保持相對的獨立性,預計以后的老系統(tǒng)只起一個用戶中心的功能,所以現(xiàn)在是基于實現(xiàn)單點登錄的能力去迭代更新現(xiàn)在的新的項目。

今天上午對于登錄的實現(xiàn)進行了相關(guān)討論,由于公司項目保密考慮只是單單做相關(guān)的介紹:

現(xiàn)有的老項目將慢慢向用戶中心轉(zhuǎn)換,而以前的新項目需要去這個用戶中心獲取登錄信息。具體的實現(xiàn)是:

登錄新項目b.exaplem.com通過session檢測到未登錄時(這里說下新的項目和老項目在同一個一級域名下),跳轉(zhuǎn)到a.exaplem.com?returnUrl='b.exaplem.com',在a.exaplem.com下成功登錄后生成一個ticket給到b.exaplem.com,b.exaplem.com將這個ticket存在session里面來保持登錄狀態(tài)。

因為現(xiàn)在基本上是先登錄a.exaplem.com然后再去登錄b.exaplem.com,所以當我們第一次進入b.exaplem.com系統(tǒng)時,b.exaplem.com會向a.exaplem.com系統(tǒng)發(fā)送請求來獲取ticket,并且生成session來維持登錄狀態(tài)。

三:實現(xiàn)

當時想通過引入vuex并通過cookie來保存token的狀態(tài),但是由于現(xiàn)在的項目還是后端以session的形式來維持用戶的登錄狀態(tài)所以還是沒有引入vuex。

基本實現(xiàn)如下:

main.js增加引入的permission.js文件如下:

import Vue from 'vue'
import router from './router'
import { asyncRouterMap, constantRouterMap } from './router'
 
function hasPermission(roles, route) { //
 if (route.meta && route.meta.role) {
  return roles.some(role => role === route.meta.role)
 } else {
  return true
 }
}

function filterAsyncRouter(asyncRouterMap, roles) {

 const accessedRouters = asyncRouterMap.filter(route => {
  if (hasPermission(roles, route)) {
   if (route.children && route.children.length) {
    route.children = filterAsyncRouter(route.children, roles)
   }
   return true
  }
  return false
 })

 return accessedRouters
}

// 加載頁面之前
router.beforeEach((to, from, next) => {
 NProgress.start() // 開啟Progress
 if (to.path == '/ContractAduit/Error') {
  next()
 } else if (!Vue.prototype.hasRoute) {

  Vue.prototype.$ajax.get(Vue.prototype.$api.getModuleHost("用戶信息接口地址"), {})
   .then(data => {
    if (data.code == 1000) {
     let menus = data.menu
     let roles = menus.map((menu, index) => {
      return parseInt(menu.url);
     })
     const accessedRouters = filterAsyncRouter(asyncRouterMap, roles)
     router.addRoutes(accessedRouters)
     Vue.prototype.userInfo = {
      id: data.id,
      realname: data.realname
     }
     Vue.prototype.hasRoute = true;
     next({...to })
    } else {
     router.push({ name: 'ErrorPageRouter' });
    }
   })
   .catch(err => console.log(err))
 } else {
  next()
 }
});

route.js文件如下:

import Vue from 'vue'
import Router from 'vue-router'

Vue.use(Router)

export const constantRouterMap = [{
  path: '/404',
  name: 'NoFoundPagetRouter',
  component: require('../views/404.page'),
  meta: {
   title: '404',
  }
 },
 {
  path: '/ContractAduit/NoAccess',
  name: 'NoAccessPageRouter',
  component: require('../views/no-access.page'),
  meta: {
   title: '無權(quán)限',
  }
 },
 {
  path: '/ContractAduit/Error',
  name: 'ErrorPageRouter',
  component: require('../views/error.page'),
  meta: {
   title: '內(nèi)部錯誤',
  }
 }
]

export default new Router({
 mode: 'history',
 routes: constantRouterMap
})

export const asyncRouterMap = [{ 
  path: '/ContractAduit/Supplier/List',
  name: 'SupplierListPageRouter',
  component: require('../views/supplier/supplier-list.page.vue'),
  meta: {
   title: '某某列表頁',
   role: 10001
  }
 },
 ...
 {
  path: '/',
  redirect: '/ContractAduit/Supplier/List',
  hidden: true,
  meta: {
   title: '某某列表頁',
   role: 10001
  }
 }, {
  path: '*',
  redirect: '/404',
  hidden: true
 }
]

因為沒有引入vuex所以需要在VUE構(gòu)造函數(shù)的原型對象上聲明變量來判斷是否已經(jīng)拉取了用戶的基本信息,因為我們后端的權(quán)限是配置的頁面級權(quán)限(即不是按照角色來安排哪個前端頁面來可訪問,而是根據(jù)后臺返回的頁面代碼來判斷哪個前端頁面可訪問)。

四:總結(jié)

因為我們的項目不可能達到千篇一律的情況,選擇適合自己項目的解決方案才是最重要的,不要為了用某個技術(shù)而去用某個技術(shù)。

以上這篇vue系列之動態(tài)路由詳解【原創(chuàng)】就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Vue input輸入框中的值如何變成黑點問題

    Vue input輸入框中的值如何變成黑點問題

    這篇文章主要介紹了Vue input輸入框中的值如何變成黑點問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-04-04
  • vue2中l(wèi)ess的安裝以及使用教程

    vue2中l(wèi)ess的安裝以及使用教程

    less是css預處理器,對原先css進行了擴展和補充,下面這篇文章主要給大家介紹了關(guān)于vue2中l(wèi)ess的安裝以及使用的相關(guān)資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-12-12
  • 使用babel-plugin-import?實現(xiàn)自動按需引入方式

    使用babel-plugin-import?實現(xiàn)自動按需引入方式

    這篇文章主要介紹了使用babel-plugin-import?實現(xiàn)自動按需引入方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • 在Vue環(huán)境下利用worker運行interval計時器的步驟

    在Vue環(huán)境下利用worker運行interval計時器的步驟

    這篇文章主要介紹了在Vue環(huán)境下利用worker運行interval計時器的步驟,本文分步驟給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-08-08
  • nuxt 頁面路由配置,主頁輪播組件開發(fā)操作

    nuxt 頁面路由配置,主頁輪播組件開發(fā)操作

    這篇文章主要介紹了nuxt 頁面路由配置,主頁輪播組件開發(fā)操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-11-11
  • VUE3+Element-plus中el-form的使用示例代碼

    VUE3+Element-plus中el-form的使用示例代碼

    這篇文章主要介紹了VUE3+Element-plus中el-form的使用示例代碼,本文通過圖文示例代碼相結(jié)合給大家介紹的非常詳細,需要的朋友可以參考下
    2024-07-07
  • vue使用微信掃一掃功能的實現(xiàn)代碼

    vue使用微信掃一掃功能的實現(xiàn)代碼

    這篇文章主要介紹了vue使用微信掃一掃功能的實現(xiàn)代碼,需要的朋友可以參考下
    2020-04-04
  • vue實現(xiàn)頁面添加水印

    vue實現(xiàn)頁面添加水印

    這篇文章主要為大家詳細介紹了vue實現(xiàn)頁面添加水印功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-07-07
  • vue 解決路由只變化參數(shù)頁面組件不更新問題

    vue 解決路由只變化參數(shù)頁面組件不更新問題

    今天小編就為大家分享一篇vue 解決路由只變化參數(shù)頁面組件不更新問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-11-11
  • vue3使用video.js播放m3u8格式視頻的操作指南

    vue3使用video.js播放m3u8格式視頻的操作指南

    有時候我們需要播放 m3u8 格式的視頻,或者實現(xiàn)視頻播放器更多定制化需求,HTML 的 video 元素無法實現(xiàn)這些需求,這時候可以考慮使用 Video.js,本文給大家介紹了vue3使用video.js播放m3u8格式視頻的操作指南,需要的朋友可以參考下
    2024-07-07

最新評論

长丰县| 英德市| 获嘉县| 南汇区| 大邑县| 丹阳市| 通道| 大荔县| 黎城县| 建宁县| 云龙县| 宝山区| 大名县| 昌平区| 漳州市| 琼中| 喜德县| 威海市| 凌海市| 蒙城县| 十堰市| 高台县| 宁夏| 宁阳县| 汶川县| 那曲县| 东兰县| 云林县| 科技| 宣汉县| 新邵县| 登封市| 牙克石市| 临桂县| 开原市| 鄂伦春自治旗| 察哈| 桦南县| 天气| 工布江达县| 宜章县|