首页  >  问答  >  正文

Nuxt3 SSR server/client middleware导致受保护页面意外渲染

<p>我正在开发一个具有简单身份验证的 Nuxt SSR 应用程序。</p> <p>我有 <code>auth middleware</code> 来保护所有登录所需的路由。</p> <pre class="brush:php;toolbar:false;">export default defineNuxtRouteMiddleware(async (to, from) => { if (process.client) { const authStore = useAuthStore() if (!authStore.check) { authStore.returnUrl = to.fullPath useRouter().push('/admin/login') } } })</pre> <p>该中间件检查存储中的浏览器 cookie,因此需要在客户端运行</p> <pre class="brush:php;toolbar:false;">export const useAuthStore = defineStore('auth', () => { const token = ref(useStorage('token', null)) const check = computed(() => token.value !== undefined) ....</pre> <p>据我了解,通常SSR中间件先运行在服务器端,然后运行在客户端。</p> <p>问题是,当我应用此身份验证 miidleware 来保护需要登录的页面时</p> <pre class="brush:php;toolbar:false;"><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></pre> <p>中间件将首先在服务器端运行,导致页面无意渲染,然后用逻辑触发客户端,并将其重定向回登录页面。这是非常丑陋的。您可以看到它的实际效果。</p> <p>有人遇到过这个问题吗?任何解决方案都会非常感激。我的要求是为此应用程序使用 SSR。</p> <hr /> <p>另外,还有一个小问题。当运行 SSR 并刷新页面时,会出现一些样式闪烁。我不知道为什么。我正在使用这个模板 https://github.com/sfxcode/nuxt3-primevue-starter</p> <hr /> <p>我已经寻找解决方案好几天了@_@</p>
P粉811349112P粉811349112417 天前495

全部回复(1)我来回复

  • P粉116654495

    P粉1166544952023-08-29 20:11:35

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

    回复
    0
  • 取消回复