next.js - Next.js 默认是同站点来源,但我仍然可以访问它
问题描述
我想知道如何保护我的 api 路由。文档说,默认情况下 api 路由是相同的站点来源。
API 路由不指定 CORS 标头,这意味着它们仅在默认情况下是同源的。您可以通过使用 cors 中间件包装请求处理程序来自定义此类行为。 Next.js 文档
但是如果我使用像 Postman 这样的请求工具,我总是可以调用它并得到结果:
// Next.js API route support: https://nextjs.org/docs/api-routes/introduction
export default (req, res) => {
res.status(200).json({ name: 'John Doe' })
}
这怎么可能?我只想限制对我的应用程序的访问。
解决方案
我发现https://github.com/vercel/next.js/blob/canary/examples/cms-contentful非常有用,可以帮助我解决同样的问题,即不再使用 API 路由作为页面的主要数据检索等。在此示例中,他们将数据检索代码放在/lib/api.js
文件中(而不是在 API 路由中)。是否使用页面 ( https://github.com/vercel/next.js/blob/canary/examples/cms-contentful/pages/posts/%5Bslug%5D.js ) 或 API ( https:// github.com/vercel/next.js/blob/canary/examples/cms-contentful/pages/api/preview.js)数据检索和数据库连接被排除在您的 API 路由之外。如果您只希望您的应用程序页面访问数据,我怀疑您可以一起跳过使用 API 路由。
这是另一个非常简单的沙箱示例(但我建议先查看上面的 GitHub 示例):
https://codesandbox.io/s/data-retrieval-outside-api-7zlmn?file=/pages/index.js
推荐阅读
- php - 查询相同数据集但在 MySQL 中使用 UTC 以外的时区时数据不一致
- regex - 在pattern1和pattern2之间打印文件中的数据而不打印pattern2
- ubuntu - 除了 /mnt/ 之外,还有其他方法可以从 wsl 访问 windows 文件吗?
- windows-installer - Windows 安装程序无法执行自定义步骤
- javascript - 如何访问函数内的数组?
- javascript - 在 addEventListener() 上的 Ava 测试 setTimeout()
- python - 列表中具有固定增量的特定数字的平均值
- python - pytest:带参数的自定义标记
- php - Laravel API 返回
- java - 使用 JPA 时,将 2 个条目添加到数据库中,而不是仅添加一个