在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/HTML/ vue-router登錄狀態(tài)檢測?

vue-router登錄狀態(tài)檢測?

一共3個頁面,默認指向login頁面,登陸后存儲client_id到cookie和global.CLIENT_ID

我想做的是登錄狀態(tài)檢測,頁面跳轉(zhuǎn)時檢查global.CLIENT_ID或者cookie,不存在就跳轉(zhuǎn)到login頁面去。

// 路由頁面
import main from './components/main/main.vue';
import star from './components/star/star.vue';
import login from './components/login/login.vue';


// 路由配置
const routes = [
    {
        name: 'main',
        path: '/main',
        component: main,
        // meta: {
        //     login_required: true
        // }
    },
    {
        name: 'star',
        path: '/star',
        component: star,
        // meta: {
        //     login_required: true
        // }
    },

    {
        name: 'login',
        path: '/login',
        component: login,
        // meta: {
        //     login_required: false
        // }
    },
    {
        path: '/',
        redirect: '/login'
    }
];

const router = new VueRouter({
    routes: routes
});

new Vue({
    el: '#app',
    components: {App},
    template: '<App/>',
    router: router
})

我百度了一下相關(guān)的問題,有人說可以用router鉤子,可我試了一下

router.beforeEach(function (to, from, next) {
    if(to.name === 'main' || to.name === 'star'){
        next('/login');
    }

    else{
        next();
    }

});

即使是這樣,也會存在兩個問題:
1、如果直接在瀏覽器地址欄輸入http://localhost:8080/#/main,可以直接略過邏輯訪問到main
2、當(dāng)前頁面是main,點擊一次star會跳轉(zhuǎn)到login,但再次點擊star,就會跳轉(zhuǎn)到star.

我也嘗試在main.js中watch global.CLIENT_ID,但報錯說遞歸太多。

請給我一個思路,或者相關(guān)代碼,謝謝。

回答
編輯回答
糖果果

在路由攔截中寫是正確的,往下的思路你沒想透
如果要去的登陸頁,不判斷有無本地信息
如果去的是其它頁面,有本地登陸信息且未超時過,否則轉(zhuǎn)登陸頁
show my code

    if(to.name==="login"){
        next();
    }else{
        if(loginInfo){
            // 這里要加一個有登陸信息比對時間
            next()
        }else{
            next("login")
        }
    }

另一個大佬的回答,供參考:
https://segmentfault.com/q/10...

2017年11月30日 16:49
編輯回答
悶油瓶

看了樓主的題目我來打一個馬后炮。

這是vue-router對于導(dǎo)航守衛(wèi)的描述

clipboard.png

由此可見 beforeEach/afterEach 這樣的守衛(wèi)確實不會在初次進入的時候觸發(fā),那么怎么辦呢?

答案是 router.onReady 方法

clipboard.png

這個我在自己項目中是如此解決的,至于登錄狀態(tài),建議的是使用 vuex 的 state 去保存。

2017年6月14日 21:58
編輯回答
風(fēng)畔
if (to.name === 'login') {
  next('/login')
}
if (global.CLIENT_ID) {
  next()
} else {
  next('/login')
}
2017年3月14日 04:55