Maison  >  Questions et réponses  >  le corps du texte

NUXT 3 : Comment utiliser le middleware de routage dans la mise en page ? (Puis-je?)

Je cherchais à utiliser le middleware Nuxt dans ma mise en page. Mais je ne sais pas si c'est possible, mais, puisque je l'ai utilisé dans Nuxt 2, cela pourrait être possible dans Nuxt 3.

Ce projet se décline en 2 mises en page différentes : Public.vueAdmin.vue. Je souhaite uniquement utiliser le middleware dans les pages utilisant Gérer la mise en page. Parce que la page qui l'utilise n'est accessible qu'aux utilisateurs connectés et que la vérification est effectuée à l'intérieur du middleware.

J'ai essayé ceci (ne fonctionne pas) :

Gérer la mise en page|manage.vue

<template>
  <div>
    <client-only>
      <admin-header />
    </client-only>
    <main>
      <slot />
    </main>
    <client-only>
      <admin-footer />
    </client-only>
  </div>
</template>

<script lang="ts">
import AdminHeader from "~~/components/admin/Header.vue"
import AdminFooter from "~~/components/admin/Footer.vue"

definePageMeta({
  middleware: "admin-auth"
});
</script>



Middleware | adminAuth.ts

export default defineNuxtRouteMiddleware((to, from) => {
    console.log(to);
    console.log("Acessando o admin auth middleware");
})


P粉619896145P粉619896145329 Il y a quelques jours679

répondre à tous(2)je répondrai

  • P粉609866533

    P粉6098665332023-10-27 11:44:26

    Le middleware ne peut pas être utilisé dans les mises en page car le middleware ne peut être utilisé que dans les pages, mais vous pouvez essayer cette méthode.

    En déclarant .global 后缀来创建全局中间件,例如 auth.global.ts après le nom du fichier middleware.

    Dans les fichiers auth.global.ts, vous pouvez utiliser des éléments de mise en page comme logique pour simuler comme si le middleware était dans vos paramètres de mise en page.

    L'exemple de logique est comme ceci

    export default defineNuxtRouteMiddleware((to, from) => {
        const user = useUserStore();
        
        if (!user && to.meta.layout === auth) {
            return navigateTo("/login");
        }
    });
    

    J'espère que cela aide

    répondre
    0
  • P粉478445671

    P粉4784456712023-10-27 00:20:45

    Vous ne pouvez pas. Le middleware ne fonctionne que sur les pages.

    Au lieu de cela, créez un composant Page parent à l'aide du middleware d'authentification et du composant NuxtPage à l'intérieur du modèle. Pour plus d'informations sur le Nested Routing, consultez la documentation Nuxt 3.

    Exemple :

    /pages/admin.vue(itinéraire => /admin)

    
    
    sssccc

    /pages/admin(dossier)

    admin/order.vue itinéraire => /admin/orders

    admin/page.vue route => /admin/some-route

    répondre
    0
  • Annulerrépondre