javascript - 使用 NextJS Link 时 ExpressJS 中间件不工作
问题描述
我在 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}`)
})
})
非常简单明了,现在我在/a
使用浏览器的 url 栏时正确地拒绝了我的访问,除非<Link href="/a">
我从我的/b
页面使用 a 。然后页面显示隐藏内容,我的访问没有被检查...为什么?我该如何解决这个问题?
可以使用此Github 链接复制此问题,您只需添加isAuth
示例,就像我在上面的示例中所做的那样。
解决方案
这是 Next.JSLink
工作方式的一部分。它已经为即将到来的站点预先获取了源,而无需针对真实端点进行获取,因此您需要针对当前情况实施前端和后端检查。
如需更多信息,请随时关注 Next.JS Github 问题:Github NextJs Restricted Links中的讨论。它清楚地解释了如何处理这种情况。
推荐阅读
- search - 排名上的 SharePoint 搜索
- javascript - React Native / Javascript - 获取导入模块的名称
- mongodb - MongoDB - JSON 模式验证
- python - Bonobo ETL _name 参数被 __call__ 方法覆盖
- grafana - 初始加载时出现 Grafana 错误:无法找到应用程序文件错误
- vb.net - 将图像加载到图片框时,Hw t 对图像进行固定缩放
- amazon-web-services - 在 Firebase、AWS 等后端服务器上接收电子邮件、解析内容和验证
- python - 如果任何附近的像素更亮,OpenCV(Python)擦除一个像素
- node.js - 通过第二个自己的 ip 地址服务器向目标 api 发送请求
- python - 用于图像分割评估的骰子系数