vue能控制未登陆的请求不能访问url_vue 地址栏直接输入 URL 跳过登录界面拦截不成功....

本文介绍如何在 Vue 应用中实现登录拦截,确保未登录用户无法直接通过 URL 访问受保护的页面。主要涉及在 `main.js` 中设置路由拦截器,检查 vuex 中的 token 信息,并在登录组件中处理登录逻辑。当用户尝试访问需要登录的页面时,若未登录则重定向到登录页。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

//main.js 中的跳转拦截代码

import {getToken} from '@/common/auth'

router.beforeEach((to,from,next)=>{

if(to.meta.requireAuth){ //要跳转的页面需要登陆权限

if(getToken()){  //通过vuex state 获取当前的token信息

next();

}

else{

next({

path:'/login',

query:{redirect:to.fullPath}

})

}

}

else{

next();

}

})

//router

export default new Router({

routes: [

{

path:'/login',

name:'Login',

component:Login,

meta:{

requireAuth: false,

}

},

{

path: '/',

name: '总览',

redirect:'/event',

component: Home,

iconCls:'iconfont icon-zonglan',

leaf:true, //没有子节点

children:[

{

path:'allscan',

name:'总览',

component:resolve=>require(['@/views/allscan/AllScan'],resolve),

meta:{

requireAuth: true,

}

}

]

},

{

path: '/',

name:'事件管理',

component:Home,

iconCls:'iconfont icon-shijian',

leaf:true,

children:[

{

path:'/event',

name:'事件管理',

component:resolve=>require(['@/views/event/EventManage'],resolve),

meta:{

keepAlive:true,  //the component is't to be cache.

requireAuth: true,

}

},

{

path:'/event',

name:'事件管理',

component:resolve=>require(['@/views/event/details/RateManage'],resolve),

meta:{

requireAuth: true,

},

children:[

{

path:'/rate',

name:'事件详情',

component:resolve=>require(['@/views/event/details/RateManage'],resolve),

}

]

},

]

}

])

//store

const state={

token:getToken();

},

actions:{

LoginByUser({commit},userInfo){

const username=userInfo.username.trim();

let params={

"email":username,

"password":userInfo.password

}

return new Promise((resolve,reject)=>{

loginByUsername(params).then(res=>{

console.log(res);

const data=res.data;

commit('SET_TOKEN',data.token);

setToken(data.token);

resolve(data);

}).catch(error=>{

reject(error);

})

})

}

}

//Login组件中登录

self.$store.dispatch('LoginByUser',this.loginForm).then((res)=>{

self.$router.push({path:self.redirect||'/'});

}).catch(()=>{

Message({message:'用户名或密码错误,请检查!',type:'error',duration:3*1000})

})

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值