Ну, я начинаю с 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, вы в конечном итоге будете перенаправлены на страницу входа.
кто-нибудь поможет?
@Aldarund, вы правы, простая ошибка, я не обращал внимания, я много часов пытался выполнить эту проверку на стороне сервера и на стороне клиента, в итоге я украл, что я зарегистрировался в nuxt.config.js, спасибо ты
Возможно, вам нужно отключить промежуточное ПО аутентификации в конкретном компоненте, странице или макете, я рекомендую вам проверить документацию модуля аутентификации: auth.nuxtjs.org/guide/middleware.html В этом примере вы можете настроить auth: false для отключения промежуточного ПО аутентификации.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


На мой взгляд, вы должны называть их 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' }
}
}
Таким образом, вы по-прежнему получаете выгоду от системы промежуточного программного обеспечения предварительного рендеринга.
это не может произойти, если вы не установили свое промежуточное ПО глобально в nuxt.config также