javascript - 如何在 next.js 部署中保密我的 API?

标签 javascript reactjs next.js

我使用 React 和 Next.js 构建了一个小型内部应用程序。我正在使用 .env 文件 per their instructions使用我的 API key 和 secret 。

我的 api/hello.js 文件做了一个简单的事情

export default async (req, res) => {
  const data = await fetch(`https://api.trello.com/1/lists/abc123/cards?key=${process.env.KEY}&token=${process.env.TOKEN}`)

然而,当我构建应用程序并将其部署到生产环境、检查 JS 文件并在其中搜索“trello”时,我能够在那里看到 key 和 secret 。

不太确定我在这里做错了什么。希望得到一些帮助。谢谢!

我的next.config.js文件:

module.exports = {
  env: {
    KEY: process.env.KEY,
    TOKEN: process.env.TOKEN
  },
}

最佳答案

从 Next.js 9.4 开始,您可以添加 .env 文件并在其中添加 secret ,而无需使用 dotenv 等第三方包。

next.config.js

require('dotenv').config();

// this code exposes your environment variables to the client-side. 
module.exports = {
  env: {
    KEY: process.env.KEY,
    TOKEN: process.env.TOKEN
  },
}

您在 API 路由中使用 secret ,因此无需将它们公开给客户端。您可以将其删除:

module.exports = {
  env: {
    KEY: process.env.KEY,
    TOKEN: process.env.TOKEN
  },
}

为避免泄露 secret ,请勿使用 NEXT_PUBLIC_ 前缀。

如果您运行next build,您不应在输出 JS 文件中看到 .env 变量。

关于javascript - 如何在 next.js 部署中保密我的 API?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61962274/

相关文章:

javascript - 如何在 fullCalendar 中绑定(bind)日期?

javascript - angularJs中缺少文件

javascript - jQuery - after()-函数触发两次

javascript - 函数外调用事件

reactjs - React - 使用 useEffect 或直接在 onChange 方法中更改值是否对性能最好?

javascript - NextJS动态路由,重新渲染特定的子组件

javascript - 自定义文件选择器字段标签中的按钮

javascript - 将数组的元素作为 React 中对象的一部分推送

reactjs - 首次在nextjs上加载动态路由时获取404

Next.js - 在文件中导入服务器端包同时包含服务器端和客户端功能?