【问题标题】:Redirect user based on their role via nuxt middleware通过 nuxt 中间件根据用户的角色重定向用户
【发布时间】:2021-10-26 14:59:57
【问题描述】:

我想通过 nuxt 中间件根据用户的角色和其他属性重定向用户。

** 发生重定向但卡在导航守卫中,页面自动重新加载一次又一次(每秒重新加载约 500 次)。

#这是我的代码

nuxt.config.js

router: {
  middleware: ['role']
},

middleware/role.js

export default function ({ redirect }) {
  if (!window.localStorage.getItem('auth.token')) {
    return redirect('/auth/login')
  }
}

the screenshot of browser console

【问题讨论】:

  • 顺便说一句,如果您打算使用 localStorage,我建议您使用此解决方案,因为 window 并不总是可用(SSR 上下文)。

标签: nuxt.js vue-router middleware nuxt-auth


【解决方案1】:

重定向是一种全新的页面加载,例如,如果您是第一次到达某个页面,或者您在该页面上按 F5 键。由于你在这里做一些条件,它总是会做一个重定向,Vue应用程序会加载,在无限循环中再次调用中间件。

要么创建router.push,要么检查初始页面是否不是您在重定向之前已经在的页面(不是 IMO 的最佳主意)。

更新答案

在中间件上下文中,如果要访问路由器,需要使用这个

<script>
export default {
  middleware({ app }) {
    if (somethingTrue) { // your condition here
      app.router.push('/')
    }
  },
}
</script>

【讨论】:

  • 感谢您的帮助。我尝试使用 $router.push(/auth/login)。但它说 $router 未定义
  • 先生,这是完美的工作,当我将此代码添加到单个页面和全局(通过在 nuxt.config.js 中定义它)。但是在某些页面(例如登录)中,注册它也可以在那里工作,而不是在这些页面中将此中间件设置为 false。 // 登录页面:export default { role: false; } 。如何为这些特定页面禁用此中间件?
  • 什么是role: false?另外,你介意为这个问题创建一个新问题吗? @SouravAdhikary
  • 我创建了一个新问题,这里是链接stackoverflow.com/q/68958010/16759400
猜你喜欢
  • 1970-01-01
  • 2021-09-17
  • 1970-01-01
  • 1970-01-01
  • 2017-11-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-01
相关资源
最近更新 更多