Nuxt3 SSR server/client middleware导致受保护页面意外渲染
P粉811349112
P粉811349112 2023-08-28 22:36:09
[Vue.js讨论组]

我正在开发一个具有简单身份验证的 Nuxt SSR 应用程序。

我有 auth middleware 来保护所有登录所需的路由。

export default defineNuxtRouteMiddleware(async (to, from) => {
  if (process.client) {
    const authStore = useAuthStore()

    if (!authStore.check) {
      authStore.returnUrl = to.fullPath

      useRouter().push('/admin/login')
    }
  }
})

该中间件检查存储中的浏览器 cookie,因此需要在客户端运行

export const useAuthStore = defineStore('auth', () => {
  const token = ref(useStorage('token', null))
  const check = computed(() => token.value !== undefined)
  ....

据我了解,通常SSR中间件先运行在服务器端,然后运行在客户端。

问题是,当我应用此身份验证 miidleware 来保护需要登录的页面时

<script setup lang="ts">
definePageMeta({
  middleware: ['admin-auth'],
  // or middleware: 'auth'
})
</script>

<template>
  <div class="flex justify-center items-center h-screen p-3">admin 1</div>
</template>

中间件将首先在服务器端运行,导致页面无意渲染,然后用逻辑触发客户端,并将其重定向回登录页面。这是非常丑陋的。您可以看到它的实际效果。

有人遇到过这个问题吗?任何解决方案都会非常感激。我的要求是为此应用程序使用 SSR。


另外,还有一个小问题。当运行 SSR 并刷新页面时,会出现一些样式闪烁。我不知道为什么。我正在使用这个模板 https://github.com/sfxcode/nuxt3-primevue-starter


我已经寻找解决方案好几天了@_@

P粉811349112
P粉811349112

全部回复(1)
P粉116654495

一般情况下,受保护的页面没有必要使用“SSR”,因为只有公共页面才需要为搜索引擎建立索引。 在SSR模式下,您可以访问存储在cookie中的数据。要获得它们,最方便的是使用特殊的库来处理 cookie,这样就不会在 SRR 或 CSR 中规定所有可能的情况。 对于 Nuxt 2,我使用 cookie-universal-nuxt 库。 尽量确保服务器和客户端的 DOM 树没有不同,否则可能会出现错误。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号