javascript - 用户登录后将 Vue Router 重定向到预期页面

标签 javascript vue.js vue-router html5-history

我正在开发一个应用程序,该应用程序会阻止用户访问除主页和注册之外的任何页面,除非他们已登录。我有一个包罗万象的路由防护,可以检查用户在尝试访问页面时是否已登录,并且如果返回 false,则重定向到登录。在登录组件中,用户登录后,他们将被定向到主页。我想要设置的是,当用户登录时,如果他们之前访问过某个页面或直接输入了页面的 url,则重定向到应用程序的最后一个页面,如果没有重定向到主页。例如:

用户导航到 my.app/{somePage} -> 路由防护检查登录返回 false -> 重定向到 my.app/sigin -> 用户成功登录 -> 重定向到 my.app/{somePage}

//Route Guard
router.beforeEach((to, from, next) => {
    if(!signedIn()){
        router.replace('/signin')
    }
    else{
        next()
    }
})


//Successful signin
signInSuccess(){
    //Want this to redirect to intended page if exists
    this.$router.replace('/')
}

我尝试使用 this.$router.go(-1) 进行重定向,但是当我重定向到路由防护中的登录页面时,预期的路由似乎没有被推送到历史记录中。

我还尝试在我的 vuex 商店中设置状态以捕获预期的路线并在登录后使用它进行重定向,但路线防护似乎会重新加载整个页面,因此商店状态会重置。

我能想到的唯一一件事是将预期的页面路由存储在浏览器本地存储中,但这似乎不是一个可靠的解决方案。

最佳答案

尝试添加

next({
    path: '/signin',
    query: { redirect: to.fullPath }
      })

而不是 router.replace('/signin')

整个守卫功能如下:

router.beforeEach((to, from, next) => {
  if (to.matched.some(record => record.meta.requiresAuth)) {
    // this route requires auth, check if logged in
    // if not, redirect to login page.
    if (!signedIn()) {
      next({
        path: '/signin',
        query: { redirect: to.fullPath }
      })
    } else {
      next()
    }
  } else {
    next() // make sure to always call next()!
  }
})

它取自 vue-router 文档,对我的情况有帮助。 https://router.vuejs.org/guide/advanced/meta.html

关于javascript - 用户登录后将 Vue Router 重定向到预期页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59686758/

相关文章:

html - 正确对齐页脚的内容

javascript - VueJS路由相同的组件不触发OWL Carousel

javascript - 将函数从 php 传递给 jquery

javascript - 如何从 firebase 检索嵌套节点内容?

javascript - Angular2 - 检查是否使用@HostListener 将新类添加到指令中

javascript - 使用vue element ui区分用户输入和数据更改

vue.js - Vue 使用 mapState 计算语法错误

javascript - Vue过渡动画不播放但保持其动画持续时间

javascript - Vue中如何用子路由组件替换父 View

javascript - 在 OnClick 中阻止 OnServerClick?