【问题标题】:ExpressJS middleware not working when using NextJS Link使用 NextJS Link 时 ExpressJS 中间件不工作
【发布时间】:2020-02-01 20:53:36
【问题描述】:

我在 Next 中使用 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}`)
  })
})

非常简单直接,现在我使用浏览器的网址栏except正确拒绝了/a 上的访问,当我使用/b 中的<Link href="/a"> 时页。然后页面显示隐藏内容,我的访问没有被检查...为什么?我该如何解决这个问题?

可以使用 Github link 复制此问题,您只需添加 isAuth 示例,就像我在上面的示例中所做的那样。

【问题讨论】:

    标签: javascript express next.js


    【解决方案1】:

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

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

    【讨论】:

    • 你可以只使用 HOC 组件来检查 cookie 是否存在
    • @NicolòCozzani 当然有不止一种方法可以解决这个问题,但我只是指出它肯定也需要前端检查。
    猜你喜欢
    • 1970-01-01
    • 2021-09-30
    • 2022-06-12
    • 2022-06-15
    • 2011-08-06
    • 1970-01-01
    • 1970-01-01
    • 2021-12-26
    • 2016-01-17
    相关资源
    最近更新 更多