You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GPT3项目中.env变量OPENAI_API_KEY暴露在dist/main.js的问题求助

解决OpenAI API密钥在前端打包后暴露的问题
  • 核心问题:前端代码运行在用户浏览器中,任何直接嵌入到前端的密钥都会被提取出来,不管用webpack插件还是混淆手段都没法从根本上解决——因为浏览器需要拿到密钥才能发起请求。你之前试的dotenv-webpack、EnvironmentPlugin这些工具,本质都是把密钥注入到前端代码里,打包后自然会出现在main.js中。

  • 正确解决方案:用后端做代理,让后端持有API密钥并调用OpenAI接口,前端只和自己的后端交互,全程不接触敏感密钥。

1. 搭建后端代理(Node.js/Express为例)

先安装依赖:

npm install express openai dotenv

创建后端文件server.js:

require('dotenv').config();
const express = require('express');
const { Configuration, OpenAIApi } = require('openai');

const app = express();
app.use(express.json());

// 后端配置OpenAI密钥(仅后端可见)
const configuration = new Configuration({
  apiKey: process.env.OPENAI_API_KEY,
});
const openai = new OpenAIApi(configuration);

// 定义前端可调用的代理接口
app.post('/api/openai', async (req, res) => {
  try {
    // 这里可根据你的需求调整OpenAI接口参数
    const response = await openai.createChatCompletion({
      model: "gpt-3.5-turbo",
      messages: req.body.messages,
    });
    res.json(response.data);
  } catch (error) {
    res.status(500).json({ error: error.message });
  }
});

// 启动后端服务
const PORT = process.env.PORT || 3001;
app.listen(PORT, () => {
  console.log(`服务运行在端口 ${PORT}`);
});

在后端根目录创建.env文件,配置密钥(注意不要提交到版本库):

OPENAI_API_KEY=你的OpenAI密钥

2. 修改前端代码

不再直接调用OpenAI SDK,改为请求自己的后端接口:

// 替换原来的OpenAI初始化及调用代码
async function callOpenAI(messages) {
  try {
    const response = await fetch('http://localhost:3001/api/openai', {
      method: 'POST',
      headers: {
        'Content-Type': 'application/json',
      },
      body: JSON.stringify({ messages }),
    });
    const data = await response.json();
    return data;
  } catch (error) {
    console.error('请求失败:', error);
  }
}

// 使用示例
callOpenAI([{ role: 'user', content: '你好' }]).then(data => {
  console.log(data);
});

3. 调整webpack配置

因为前端不再需要接触API密钥,直接移除dotenv相关插件配置:

const path = require('path');

const config = {
  entry: "./src/index.js",
  output: {
    path: path.resolve(__dirname, "dist"),
  },
  plugins: [
    // 保留你的其他插件,移除Dotenv相关配置
  ],
};

module.exports = config;

内容的提问来源于stack exchange,提问作者user21229303

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 02:33:22