Vue实现登录后,如何返回到之前的地址

在开发中我们经常遇到这样的需求,需要用户直接点击一个链接进入到一个页面,用户点击后链接后会触发401拦截返回登录界面,登录后又跳转到链接的页面而不是首页,这种问题该如何去做呢?

先说一下我们需要用到的几个API:

  • router.currentRoute:当前的路由信息对象,我们可以通过router.currentRoute.fullPath获得解析后的 URL,包含查询参数和 hash 的完整路径,如果要访问的页面的路由有命名(name)的话,可以通过router.currentRoute.name获得当前路由的名称。

  • router.replace:作用和router.push相同,不过它不会向history添加新纪录,而是替换当前的history记录。


由于大家的代码写的都不一样,我就不放我具体的实现代码,简单介绍一下思路:

  • 1.用户点开链接后,跳转到的目标的路由页面,然后触发401拦截器,返回登录页面:
//401拦截
if(status == "401"){
  router.push("/login")   
}
  • 2.我们可以在401拦截的时候将目标链接保存在url中:
if (status == 401) {
   //判断当前的路由是否是目标路由
   if(router.currentRoute.name == "target"){
     //跳转回login路由,并把目标路由的url路径保存在login的query中
     router.replace({
       name:"login",
       query: {redirect: router.currentRoute.fullPath}
     })
   }else{
    /* 普通401拦截直接返回到登录页面 */
    router.push('/login');
   }
}
  • 3.点击登录后使用url上保存的query直接跳转回目标页面
router.push({path:decodeURIComponent(url)});

更多精彩请关注:Vue专题

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • VUE Vue :数据驱动的M V Vm框架 m :model(后台提供数据),v :view(页面),vM(模板...
    wudongyu阅读 10,752评论 0 11
  • 路由要解决的核心问题是通过建立URL和页面的对应关系,使得不同的页面可以用不同的URL表示。在angular中,页...
    oWSQo阅读 5,040评论 0 1
  • 一、前言 要学习vue-router就要先知道这里的路由是什么?为什么我们不能像原来一样直接用 标签编写链接哪?...
    浪里行舟阅读 67,843评论 12 203
  • vue-login-intercept 一个 Vue.js 的小demo 介绍 项目地址,有喜欢的欢迎 star ...
    无亦情阅读 14,167评论 4 21
  • _________________________________________________________...
    fastwe阅读 5,211评论 0 0