当前位置: 首页 > 知识库问答 >
问题:

在受保护的路由中重定向时出现问题-Vue js路由器

范安歌
2023-03-14

我的 vue 路由器中有这条路由.js文件.

routes: [{
      path: "/",
      component: Home,
      beforeEnter: (to, from, next) => {
        if (!store.state.is_login) {
          next('/login')
        }
        next()
      }
    }]

我使用 beforeEnter 选项重定向用户,如果store.state.is_login === true

第一个问题:所以当我在浏览器中输入网址时,我会重定向到/登录页面。这很好。但是当我单击徽标按钮时,这个beforeEnter功能不起作用。这是我的按钮,使用:

<router-link to="/" class="bp-logo"><Logo />home</router-link>

第二个问题是:

  1. is_login在我的store.state。is_login
  2. 我正在本地存储令牌
  3. user_info在store.state.user中

问题:

条件1:如果!is_login重定向到 /login。

条件2:如果令牌存在!is_login=

条件3:如果!is_登录

共有2个答案

何修能
2023-03-14

我不知何故想通了。第一个问题是当你渲染一个路由时,你被点击再次到达该路由的功能路由器。之前每个不触发。所以我在文档中找到了另一种方法。

routes: [{
      path: "/",
      component: Home,
      beforeEnter: isAuthenticated,
    }]

这是我处理这两个问题的自定义函数。

const isAuthenticated = (to, from, next) => {
  if (!store.state.is_login) {
    if ((localStorage.getItem('token')) && (lodash.isEmpty(store.state.user))) {
      let headers = {
        headers: {
          Authorization: localStorage.getItem("token"),
          "Access-Control-Allow-Origin": "*"
        }
      };
      axios
        .get(`${store.state.api}admin/user`, headers)
        .then(response => {
          store.state.user = response.data.user;
          store.state.is_login = true;
          next("/");
        })
        .catch(error => {
          store.state.Error = error;
          next('/login')
        });
    }
    next('/login')
    return
  }
  next()
  return
}
步博厚
2023-03-14

您需要更改您的befor起初方法来访问存储实例。像这样重写:

beforeEnter: (to, from, next) => {
        if (!this.$store.state.is_login) {
          next('/login')
        }
        next()
      }
 类似资料:
  • 根据React Router给出的示例,我正在尝试创建一个受保护的路由,当用户未被授权使用Find Router for Relay Modern时,该路由将重定向到: 我用真实的登录逻辑替换了fakeAuth,但其余的都是一样的。这条路线就是不渲染。 发现路由器似乎是轻的例子围绕这个特定的问题。有什么想法吗?

  • 英文原文:http://emberjs.com/guides/routing/redirection/ 过渡与重定向 在路由中调用transitionTo或者在控制器中调用transitionToRoute,将停止当前正在进行的过渡,并开启一个新的,这也用作重定向。transitionTo具有参数,其行为与link-to助手相同。 如果过渡到一个没有动态段的路由,路由的model钩子始终都会运行。

  • 在< code>/users下,我有一些需要身份验证令牌的路由,还有一些不需要。为了实现这一点,我做了以下工作。 然后我按照以下方式安装这些路线。 当我向< code>/users发送POST时,它运行预期的路径,但是当< code>next()被调用时,< code > protected _ middleware 运行。这是因为它在标有“D”的行中找到了下一个< code>/users定义。

  • 我一直试图做一个简单的重定向到按钮点击的另一个组件,但由于某种原因,它不起作用。我想重定向到/dashboard并从登录显示AdminServices,如下所示: //索引。js //应用程序。js //登录。js //管理服务。js

  • 当我们想要通知客户端应用程序已移动此URL时,重定向路由非常有用。 可以使用以下函数重定向URL。 static Cake\Routing\Router::redirect($route, $url, $options =[]) 上述功能有三个参数 - 描述路径模板的字符串。 要重定向到的URL。 一个数组,它将路径中的命名元素与该元素应匹配的正则表达式相匹配。 例子 (Example) 在co