NUXT 3在中间件中使用可复合

发布于 2025-02-01 13:00:02 字数 1093 浏览 2 评论 0原文

我想通过检查用户是否已登录来守护一条路线,但是:

  1. 我无法阅读可合价的值,
  2. 我不确定我的中间件是否合适。

我的组合:

// composable/useAuth.js
const useAuth = () => {

  // user login, sign out, sign up logic

  const isLoggedIn = () => {
    return !!user.value
  }

  return {
    isLoggedIn
  }
}

export default useAuth

中间件:

// middleware/check-admin.js
export default defineNuxtRouteMiddleware((to, from) => {
  const { isLoggedIn } = useAuth()

  console.log(isLoggedIn); // <- Screenshot

  if (isLoggedIn) {
    return navigateTo(`/albums/${to.params.id}/edit`)
  } else {
    return navigateTo('/')
  }
})

我的控制台记录了方法主体。但是我期望有虚假或真实的价值:


问题:

  • 如何从组合物中读取布尔值以通过中间件内的测试?
  • 如果用户没有凭据,可以使用navigateto 中止路由吗?文档说,我可以使用abortnavigation()

I want to guard a route by checking if the user is logged in, but:

  1. I can't read the composable value,
  2. I am unsure if my middleware got the right body.

My composable:

// composable/useAuth.js
const useAuth = () => {

  // user login, sign out, sign up logic

  const isLoggedIn = () => {
    return !!user.value
  }

  return {
    isLoggedIn
  }
}

export default useAuth

My middleware:

// middleware/check-admin.js
export default defineNuxtRouteMiddleware((to, from) => {
  const { isLoggedIn } = useAuth()

  console.log(isLoggedIn); // <- Screenshot

  if (isLoggedIn) {
    return navigateTo(`/albums/${to.params.id}/edit`)
  } else {
    return navigateTo('/')
  }
})

My console logs a method body. But I expected a falsy or truthy value:
enter image description here


Problems:

  • How can I read a boolean value from my composables to pass the test inside the middleware?
  • It is okay to use navigateTo to abort the routing, if the user got no credentials? The docs says, I can use abortNavigation()

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

看春风乍起 2025-02-08 13:00:02

您返回功能,但从未在最后使用()调用它。

尝试这样做:

export default defineNuxtRouteMiddleware((to, from) => {
  const { isLoggedIn } = useAuth()

  console.log(isLoggedIn()); // <- Screenshot
  // `from.name === login` will trigger rediraction for example if user want to login but he is already logged in.
  // form.name will be necesery if you use suffix `.global` in file name.
  if (isLoggedIn() && to.params.id && !from.params.id && from.name === `login`) {
    return navigateTo(`/albums/${to.params.id}/edit`)
  }
  if (!isLoggedIn() && form.params.id) {
    return abortNavigation()
  }
})

使用值以了解用户要在哪里导航。

如果您不使用中间件文件中的.global后缀,则可以选择在组件中使用中间件的位置。

<script setup>
definePageMeta({
  middleware: ["auth"]
  // or middleware: 'auth'
})
</script>

You returning function, but never invoke it by using () at the end.

Try like this:

export default defineNuxtRouteMiddleware((to, from) => {
  const { isLoggedIn } = useAuth()

  console.log(isLoggedIn()); // <- Screenshot
  // `from.name === login` will trigger rediraction for example if user want to login but he is already logged in.
  // form.name will be necesery if you use suffix `.global` in file name.
  if (isLoggedIn() && to.params.id && !from.params.id && from.name === `login`) {
    return navigateTo(`/albums/${to.params.id}/edit`)
  }
  if (!isLoggedIn() && form.params.id) {
    return abortNavigation()
  }
})

Use to value to know where user want to navigate.

You can choose where to use middleware in component if you're not using .global suffix in middleware file.

<script setup>
definePageMeta({
  middleware: ["auth"]
  // or middleware: 'auth'
})
</script>
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文