Промежуточное ПО на конкретной странице - NuxtJS

Ну, я начинаю с nuxt, и у меня есть следующие маршруты:

/home

/dashboard

/login

Я хочу защитить /dashboard, но только для пользователей, вошедших с токеном в Cookie.

Затем я создал промежуточное ПО

/middleware/auth.js

import Cookie from 'js-cookie'

export default function({ req, redirect }) {
  if (process.server) {
    if (!req.headers.cookie) return redirect('/login')
    const jwtCookie = req.headers.cookie.split(';').find(c => c.trim().startsWith('jwt='))
    if (!jwtCookie) return redirect('/login')
  } else {
    const jwt = Cookie.get('jwt')
    if (!jwt) { window.location = '/login' }
  }
}

и зарегистрируйте промежуточное ПО на моем макете или странице панели инструментов

<script>
export default {
  middleware: 'auth',
}
</script>

когда я получаю доступ к /dashboard, очевидно, работает отлично

но проблема в том, что промежуточное ПО регистрируется глобально, оно работает на всех страницах, всех маршрутах

Поэтому, когда вы получаете доступ к /home, который является опубликованной страницей, если у вас нет файла cookie, вы в конечном итоге будете перенаправлены на страницу входа.

кто-нибудь поможет?

это не может произойти, если вы не установили свое промежуточное ПО глобально в nuxt.config также

Aldarund 09.09.2018 19:13

@Aldarund, вы правы, простая ошибка, я не обращал внимания, я много часов пытался выполнить эту проверку на стороне сервера и на стороне клиента, в итоге я украл, что я зарегистрировался в nuxt.config.js, спасибо ты

Yung Silva 09.09.2018 19:20

Возможно, вам нужно отключить промежуточное ПО аутентификации в конкретном компоненте, странице или макете, я рекомендую вам проверить документацию модуля аутентификации: auth.nuxtjs.org/guide/middleware.html В этом примере вы можете настроить auth: false для отключения промежуточного ПО аутентификации.

Carlos Rodríguez 09.06.2020 11:11
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
4
3
1 924
3

Ответы 3

На мой взгляд, вы должны называть их plugin из-за промежуточное ПО, вызываемое каждым измененным маршрутом, также вы не можете использовать промежуточное ПО в макете и подкомпоненте, вы можете использовать его как plugin и вызывать его вручную везде, также оно является реактивным и исполняемым.

 path: /plugind/auth.js

 import Cookie from 'js-cookie';

 export default function({ req, redirect }) {
 if (process.server) {
   if (!req.headers.cookie) return redirect('/login')
    const jwtCookie = req.headers.cookie.split(';').find(c => 
    c.trim().startsWith('jwt='))
    if (!jwtCookie) return redirect('/login')
    } else {
    const jwt = Cookie.get('jwt')
   if (!jwt) { window.location = '/login'
   }
  }
 }

Вероятно, вы зарегистрировали свой middleware/auth.js в своем nuxt.config.js. Когда вы регистрируете промежуточное ПО в nuxt.config.js, вы регистрируете его глобально, то есть оно будет вызываться при каждом изменении маршрута.

Документы: https://nuxtjs.org/guide/routing#middleware

Как насчет создания условия на основе параметра route.path?

export default function({ req, redirect, route }) {

  if (!route.path.includes('dashboard')) { // if path doesn't include "dashboard", stop there
    return;
  }

  if (process.server) {
    if (!req.headers.cookie) return redirect('/login')
    const jwtCookie = req.headers.cookie.split(';').find(c => c.trim().startsWith('jwt='))
    if (!jwtCookie) return redirect('/login')
  } else {
    const jwt = Cookie.get('jwt')
    if (!jwt) { window.location = '/login' }
  }
}

Таким образом, вы по-прежнему получаете выгоду от системы промежуточного программного обеспечения предварительного рендеринга.

Другие вопросы по теме