首页 > 解决方案 > 在不更改路由的情况下重新评估 Nuxt.js 中间件

问题描述

我想知道是否可以在不实际更改当前路由的情况下从本质上“重新评估”中间件条件。

中间件的目的是防止未登录的用户访问“仪表板”。我的问题是,用户可以登录或注销而不必更改路由,但在他们尝试更改页面之前不会被重定向。

我有一个 VueX 操作,当用户的身份验证状态发生变化时触发,但这(据我所见)无法访问重定向或路由变量。

// /mixins/auth.js
const reevaluateAuthStatus = (store, redirect, route) => {
  console.log(route)
  const redirectPolicy = route.meta.map((meta) => {
    if (meta.auth && typeof meta.auth.redirectPolicy !== 'undefined') { return meta.auth.redirectPolicy[0] }
    return []
  })

  const user = store.getters['auth/getUser']
  if (redirectPolicy.includes('LOGGEDOUT')) {
    if (user) {
      return redirect('/dashboard')
    }
  } else if (redirectPolicy.includes('LOGGEDIN')) {
    if (!user) {
      return redirect('/login')
    }
  }
}

module.exports = {
  reevaluateAuthStatus
}

// /middleware/auth.js
import { reevaluateAuthStatus } from '../mixins/auth'

export default function ({ store, redirect, route }) {
  reevaluateAuthStatus(store, redirect, route)
}

感谢您对此的任何帮助:)

标签: vue.jsredirectnuxt.jsvuexmiddleware

解决方案


您不能重新评估中间件 AFAIK,因为它主要是这个(如文档中所述

导航到更多路由时,将在客户端调用中间件 [...]

您仍然可以实现此 IMO 的 2 种干净方法:

一些更丑陋的解决方案可能是:

  • setInterval每隔 5s 左右进行一次内部检查并检查实际状态是否仍然有效
  • 移动到您实际所在的同一页面,类似于Vue 路由器文档this.$router.go(0)中以某种方式解释的内容

尽管如此,在大多数情况下,如果用户注销,我认为这可能不是一个大问题,因为一旦他尝试某事,他就会被重定向。
好像用户已登录,我什至不确定如果他没有在您的 SPA 上做一些积极的事情,这种情况会发生在哪种情况下。


推荐阅读