vue頁面跳轉攔截器


登錄攔截邏輯

第一步:路由攔截

首先在定義路由的時候就需要多添加一個自定義字段requireAuth,用於判斷該路由的訪問是否需要登錄。如果用戶已經登錄,則順利進入路由, 否則就進入登錄頁面。在路由管理頁面添加meta字段;

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

Vue.use(Router)

const routes = [
	{
	    path: '/',
	    name: "歡迎",
	    meta: {
            requireAuth: true,  // 添加該字段,表示進入這個路由是需要登錄的
        },
	    component: resolve => require(["../components/Hello.vue"], resolve)
	},
	{
	    path: '/login',
	    name: "登錄",
	    /*meta: {
                requireAuth: false,  // 添加該字段,表示進入這個路由是需要登錄的
            },*/
	    component: resolve => require(["../view/login/login.vue"], resolve)
	}
]

export default new Router({
    base: "/",
    routes
})

定義完路由后,我們主要是利用vue-router提供的鈎子函數beforeEach()對路由進行判斷。。所以在main.js加上

router.beforeEach((to, from, next) => {
    if (to.meta.requireAuth) {  // 判斷該路由是否需要登錄權限
        if (store.state.token) {  // 通過vuex state獲取當前的token是否存在
            next();
        }
        else {
            next({
                path: '/login',
                query: {redirect: to.fullPath}  // 將跳轉的路由path作為參數,登錄成功后跳轉到該路由
            })
        }
    }
    else {
        next();
    }
})

每個鈎子方法接收三個參數:

  • to: Route: 即將要進入的目標 路由對象
  • from: Route: 當前導航正要離開的路由
  • next: Function: 一定要調用該方法來 resolve 這個鈎子。執行效果依賴 next 方法的調用參數。
  • next(): 進行管道中的下一個鈎子。如果全部鈎子執行完了,則導航的狀態就是 confirmed (確認的)。
  • next(false): 中斷當前的導航。如果瀏覽器的 URL 改變了(可能是用戶手動或者瀏覽器后退按鈕),那么 URL 地址會重置到 from 路由對應的地址。
  • next(‘/’) 或者 next({ path: ‘/’ }): 跳轉到一個不同的地址。當前的導航被中斷,然后進行一個新的導航。

確保要調用 next 方法,否則鈎子就不會被 resolved。

其中,to.meta中是我們自定義的數據,其中就包括我們剛剛定義的requireAuth字段。通過這個字段來判斷該路由是否需要登錄權限。需要的話,同時當前應用不存在token,則跳轉到登錄頁面,進行登錄。登錄成功后跳轉到目標路由。

完成后,我們可以在登錄頁面。控制用戶登錄成功后,vuex的token狀態改變就可以了

<script>
export default {
  methods:{
    login(){
      this.$store.commit('setToken','true');     //改變token狀態
      let redirect = decodeURIComponent(this.$route.query.redirect || '/');  獲取登錄成功后要跳轉的路由。
      this.$router.push({
        path: redirect
      })
    }
  }
}
</script>


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM