我正在尝试使用 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
页面而不是停留在需要用户进行身份验证的页面上。
$router.push
不会刷新同一路径上的页面。你可以试试$router.go()
。
如果您不带参数调用
go()
,则会刷新当前页面。
对于谷歌用户
我有一个 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 })
}