VUE 前端登录拦截并且URL为根路径的话跳转指定页

背景:因为系统对接了SSO,所以除了手动走/login页面能进入本来系统的登录页之外,其他URL都会自动进入SSO登录页,包括走根目录也会进入SSO登录页,经理想让走根目录进入本系统的登录页

原本加了SSO的登录拦截:

router.beforeEach((to, from, next) => {
    iView.LoadingBar.start();
    let hasLogin = false;
    var token = sessionStorage.getItem('token');
    var loginInfo = sessionStorage.getItem('loginInfo');
    var url="SSO登录路径";
    if (token !== undefined && token !== null && loginInfo !== undefined && loginInfo !== null) {
        hasLogin = true;
    }
    if(to.name === 'reset' && to.query.tableid){
        Util.toDefaultPage([...routers], to.name, router, next);
    }else if(to.name === 'homework' && to.query.s){
    	Util.toDefaultPage([...routers], to.name, router, next);
    }else if (to.name === 'SSOlogin' && to.query.spId && to.query.code){   //将接收url空白页放行
        Util.toDefaultPage([...routers], to.name, router, next);
    }
    else if (!hasLogin && to.name !== 'login') {       // 判断是否已经登录且前往的页面不是登录页
        window.location.href = url;
    } else if (hasLogin && to.name === 'login') { // 判断是否已经登录且前往的是登录页
        next({
            name: 'homework'
        });
    } else {
       Util.toDefaultPage([...routers], to.name, router, next);
    }
});

可以看到原本只对除了/login的路径进行拦截到SSO登录页,现在只需要加上一句判断,把根目录放入判断的白名单就能完成功能

第一次修改:本来我认为错了, 因为经理给我看了一段路径,是进入生产环境的,我就以为是走单独域名的时候要走本系统页
所以就加了个判断

else if(!hasLogin && to.fullpath === '域名' ){  //判断是否是从根路径进入url
        next({
            name: 'login'
        });
    }

当我跟经理说我做好了的时候,经理回:“测试环境试下”,我就想了一下,回:这段路径不是进入生产环境的路径吗?那不是应该在生产环境才生效嘛?
经理:不是根路径吗?那无所谓环境的吧? 这时,我就反应过来了,根路径!也就是只有端口名和端口号的URL

第二次修改:然后我就想到了vue 获取当前URL的方法

然后就用了 window.location.origin 获取路径前面的url

else if((!hasLogin && window.location.origin === '本地域名') || (!hasLogin && window.location.origin === '测试环境域名')|| (!hasLogin && window.location.origin === '生产环境域名')){  //判断是否是从根路径进入url
        next({
            name: 'login'
        });
    }

然后经理说:你这样子写是错的,这个功能是不能绑定固定url的,然后我debugger测试了一下,发现根目录的to.path都是 '/'
第三次修改: 于是最后加了判断

else if(!hasLogin && to.path === '/'){  //判断是否是从根路径进入url
        next({
            name: 'login'
        });
    }

用本地环境测试和用测试环境测试都通过了,经理测试也测试过了
解决 !

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值