Промежуточное ПО на конкретной странице - NuxtJS - PullRequest
0 голосов
/ 09 сентября 2018

Ну, я начинаю с 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, вы в конечном итоге перенаправляетесь на страницу входа

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

1 Ответ

0 голосов
/ 10 сентября 2018

На мой взгляд, вы должны назвать их 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'
   }
  }
 }
...