Промежуточное программное обеспечение ExpressJS не работает при использовании NextJS Link - PullRequest
4 голосов
/ 03 октября 2019

Я использую экспресс-маршруты с помощью Next, в приведенном ниже примере /a должен быть доступен для авторизованных людей, в то время как /b является общедоступным.

... other imports...
const app = next({ isDev })
const handle = app.getRequestHandler()

async function isAuth(req, res, next) {
  const token = req.header('x-Auth-Token');
  if (!token) return res.status(401).send('Access denied. No token provided.');

  req.user = 'Connected!';
  next();
}

app.prepare().then(() => {
  const server = express()

  server.get('/a', isAuth, async (req, res) => {
    return app.render(req, res, '/a', req.query)
  })

  server.get('/b', async (req, res) => {
    return app.render(req, res, '/b', req.query)
  })

  server.all('*', (req, res) => {
    return handle(req, res)
  })

  server.listen(port, err => {
    if (err) throw err
    console.log(`> Ready on http://localhost:${port}`)
  })
})

Довольно просто и понятно, а пока яЯ правильно получаю отказ в доступе на /a, используя строку URL браузера , за исключением , когда я использую <Link href="/a"> со своей страницы /b. Тогда страница показывает скрытый контент, и мой доступ не был проверен ... почему? Как я могу решить эту проблему?

Эта проблема может быть воспроизведена с помощью этой ссылки Github , вам просто нужно добавить пример isAuth, как я это делал в примере выше.

1 Ответ

1 голос
/ 03 октября 2019

Это часть того, как работает Next.JS Link. Он уже предварительно извлекает исходные коды для будущего сайта, даже не сопоставляя их с реальной конечной точкой, поэтому вам необходимо реализовать как внешние, так и внутренние проверки для текущей ситуации.

Для получения дополнительной информации не стесняйтесь следить за этим обсуждением в Next.JS Github Issue: Github NextJs Restricted Links . Это ясно объясняет, как бороться с такой ситуацией.

...