• vue需要登录、不需要登录访问的页面,都在登录后回到之前的页面


    出现场景:最近在处理一个vue相关的阅读项目。有些页面(如首页)不需要登录可以查看,有些页面(书籍阅读页面)需要登录才能查看,但是,都想在登录之后返回到之前的页面。

    因为我这边需要登录的页面较多,不需要登录的页面较少,所以在router.js中的meta如下处理(即通过noNeedLogin控制):

    //首页
    {
      path: 'home',
      name: 'home',
      component: _import('Home'),
      meta: { noNeedLogin: true },
    },
    

    相关的路由守卫这样处理:

    router.beforeEach((to, from, next) => {
      if (!to.meta.noNeedLogin) { // 需要登录的页面处理
        if (window.localStorage.getItem('isLogin')) {
          next();
        } else {
          next({ path: '/form/userLogin', query: { redirect: to.fullPath } });
        }
      } else { // 不需要登录的页面处理
        next();
      }
    });
    

    但是上边的代码对不需要登录就可访问的页面没有用,就想着在else里面通过判断to.path==='/form/userLogin'来解决这个问题。最后导致页面死循环了,最后在登录页面使用了守卫解决。方案如下:

    <script>
      let redirectUrl; // 定义一个路由变量
      export default {
        ...
      }
    </script>
    

    然后在beforeRouteEnter中进行处理:

    <script>
      let redirectUrl;
      export default {
          beforeRouteEnter(to, from, next) {
            redirectUrl = from.fullPath;
            next(); // 这个不写的话无法显示登录页面
         }
      }
    </script>
    

    在登录请求完成之后跳转到上个页面:

    <script>
      let redirectUrl;
      export default {
        beforeRouteEnter(to, from, next) {
          if (to.query && to.query.redirect) {
            redirectUrl = to.query.redirect
          } else {
            redirectUrl = from.fullPath
          }
          next(); // 这个不写的话无法显示login页面
        },
        methods:{
          login() {
            ...
            this.$router.push(redirectUrl);
          }
        }
      }
    </script>
    

    但是此时有些页面在登录后是不需要跳回的,而是应该跳到首页的,比如从注册页面到登录页,登录之后不是回到注册页,而是跳转到首页,所以需要添加处理,用一个白名单:

    <script>
      let redirectUrl;
      // 不重定向白名单,比如从注册跳转到登录,登录之后应该到首页而不是回到注册页
      const whiteList = ['/form/userLogin', '/form/userRegister', '/form/resetPassword']
      export default {
        beforeRouteEnter(to, from, next) {
          if (to.query && to.query.redirect) {
            redirectUrl = to.query.redirect
          } else {
            redirectUrl = from.fullPath
          }
          next(); // 这个不写的话无法显示login页面
        },
        methods:{
          login() {
            ...
            let url = whiteList.indexOf(redirectUrl) === -1 ? redirectUrl : '/';
            this.$router.push(url);
          }
        }
      }
    </script>
    

    此篇文章引用:vue 需要登录、不需要登录访问的页面都在login后回到之前的页面

  • 相关阅读:
    区块链匿名资产的发行原理
    14亿条记录,12c 做不到2小时内变更表结构字段类型?
    MySQL修改有存量数据的数据库字符集实战
    Linux之HugePages快速配置
    快手大数据架构师:实时OLAP分析平台这么做,才可能超越抖音
    Oracle 12c 能否在2小时内完成一张14亿条记录的表结构字段类型变更
    Redis NoSQL
    对python virtualenv虚拟环境的理解
    16、SpringBoot------整合MapStruct
    16、SpringBoot------整合MapStruct
  • 原文地址:https://www.cnblogs.com/AdolphWilliam/p/14931816.html
Copyright © 2020-2023  润新知