Nuxt.js 在商店调度后触发中间件

问题描述 投票:0回答:2

我正在尝试使用 Nuxt.js 创建一个带有身份验证的简单应用程序。我有一个

auth
中间件,如果我未登录,它会将我重定向到
login
页面。问题出在
logout
函数中,该函数应该检查此页面上是否有
auth
中间件并将我重定向到
login 
页(如果有)。我本来想写的

methods: {
    async logout() {
        try {
            await this.$store.dispatch('auth/logout');
            this.$router.push(this.$route.fullPath);
        } catch (e) {
            console.log(e);
        }
    }
}

但是

router.push
不会触发中间件。我可以用
logout
函数做什么来使其工作?

(主要问题是如何在页面上手动重新运行中间件,而不需要硬刷新来检查页面是否需要身份验证)。

问题基本上是,如果在需要身份验证的页面上调用

logout
,则在将当前路径“推送”到路由器后,需要运行当前页面上的中间件,因此用户将被重定向到
login
页面而不是停留在需要用户进行身份验证的页面上。

javascript nuxt.js server-side-rendering
2个回答
0
投票

$router.push
不会刷新同一路径上的页面。你可以试试
$router.go()

如果您不带参数调用

go()
,则会刷新当前页面。


0
投票

对于谷歌用户

我有一个 hacky 解决方案..将

router.push()
与查询参数一起使用。然后删除中间件中的查询参数。

示例

代码中的某处:

const router = useRouter()
const route = useRoute()

let query: any = {...route.query}
query.hash = uniqid()
router.push({ query })

中间件:

const router = useRouter()

if (to.query?.hash) {
    let query: any = {...to.query}
    delete query.hash

    router.replace({ query })
}
© www.soinside.com 2019 - 2024. All rights reserved.