vue.js - 在不更改路由的情况下重新评估 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)
}
感谢您对此的任何帮助:)
解决方案
您不能重新评估中间件 AFAIK,因为它主要是这个(如文档中所述)
导航到更多路由时,将在客户端调用中间件 [...]
您仍然可以实现此 IMO 的 2 种干净方法:
- 使用一些 websockets,无论是socket.io还是类似Apollo Subscriptions的东西,让你的 UI 考虑到新的变化
- 将您的中间件逻辑导出到某种调用,您可以通过再次调用该
$fetch
钩子或Nuxt 中的任何其他与数据相关的获取钩子再次触发该调用
一些更丑陋的解决方案可能是:
setInterval
每隔 5s 左右进行一次内部检查并检查实际状态是否仍然有效- 移动到您实际所在的同一页面,类似于Vue 路由器文档
this.$router.go(0)
中以某种方式解释的内容
尽管如此,在大多数情况下,如果用户注销,我认为这可能不是一个大问题,因为一旦他尝试某事,他就会被重定向。
好像用户已登录,我什至不确定如果他没有在您的 SPA 上做一些积极的事情,这种情况会发生在哪种情况下。
推荐阅读
- splunk-query - 我可以使用什么正则表达式命令在 splunk 中创建一个字段
- axios - 使用 axios GET 请求到端口 81(甚至是 js 本机 fetch)
- javascript - 比较 userInput JavaScript
- javascript - DataTable 不显示 AJAX JSON 数据
- vim - Vim 自动完成功能无法使用组合键
- python - 如何修复 ValueError?
- c++ - noexcept + declval 在 MSVC 下编译失败
- c - 检查 sqlite3 表列是否已填充
- flutter - 如何在同步融合条形图中放置自定义形状的条形图,颤动?
- python - 无法覆盖 Django 3.0 中的管理模板