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

在Vue应用中,遇到一个问题:未登录用户能够直接通过URL跳转到需要授权的页面。解决方案是在`main.js`中设置路由拦截器,检查`getToken()`返回的token信息,如果未登录则重定向到登录页。但目前直接输入URL仍能绕过拦截。问题可能在于对URL的处理或拦截逻辑。
摘要由CSDN通过智能技术生成

目前只有登录页面不需要token 验证,其他页面都需要登录后才能进入(token有效),api 请求的header中带token信息,在登录成功后将token存储在cookies 中。 除了Login 外其他跳转都加requireAuth来判断。

目前没有登录的时候直接点击历史纪录中URL 直接就进到里边的页面了。

以本地tomcat 环境为例:http://172.21.81.206:8085/storemonitor_ui 这个url点击直接进入无法拦截,如果是下边的url则不登录无法进入。path:'/event'

http://172.21.81.206:8085/storemonitor_ui/#/login?redirect=%2Fevent

//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、付费专栏及课程。

余额充值