使用NextJS Link时ExpressJS中间件不起作用

时间:2019-10-03 14:00:24

标签: javascript express next.js

我在下一个示例中使用了Express路由,在下面的示例中,/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正确地使用浏览器的 except 网址栏拒绝访问<Link href="/a">我的/b页面。然后页面显示隐藏的内容,而我的访问权限尚未检查...为什么?我该如何解决这个问题?

可以使用此Github link来复制此问题,您只需要像上述示例一样添加isAuth示例即可。

1 个答案:

答案 0 :(得分:1)

这是Next.JS Link工作方式的一部分。它已经预取了即将到来的站点的资源,而从未针对真实的端点进行取回,因此您需要针对当前情况实施前端和后端检查。

有关更多信息,请随时关注Next.JS Github问题Github NextJs Restricted Links中的讨论。它清楚地说明了如何处理这种情况。