如何使用 React + Webpack 应用程序存储和访问我的 API 密钥?

Posted

技术标签:

【中文标题】如何使用 React + Webpack 应用程序存储和访问我的 API 密钥?【英文标题】:How do I store and access my API keys with a React + Webpack app? 【发布时间】:2017-05-27 19:17:08 【问题描述】:

我目前正在构建一个前端使用 React、Babel 和 Webpack 的项目。

我需要在某处存储和访问我的 API 密钥,但我不确定在哪里。

我认为我应该将我的 API 密钥存储在我的 .env 文件中,该文件位于我的 .gitignore 中。但这是在欺骗我。

根据我的阅读,webpack 似乎可以访问 yuor .env 文件中的环境变量。

但如果我这样做,是否意味着当我发出请求时,我的 API 密钥将通过浏览器 - 所以密钥将不受保护?

过去我使用的是 node express 后端服务器,因此我的 API 密钥受到保护,与浏览器无关。但是我不确定当我也有 webpack 开发服务器时是否需要这个。

我开始设置 node express 后端服务器,但不知道如何将其绑定到我的 webpack.config 或 package.json。 Webpack 已经是一个节点快递服务器!那么我有2台服务器吗?拥有第二台服务器的唯一原因是为了保护我的 API 密钥?

我真的很困惑自己,我认为不必要地复杂化了事情。

非常感谢任何帮助。

【问题讨论】:

【参考方案1】:

您可以编写一个快速服务器来使用密钥进行 API 调用并提供相同的响应。以这种方式使用 express 服务器作为中介,您将永远不必在客户端公开 API 密钥。

编辑:没有读到你已经考虑过了

在这种情况下,您可以使用 webpack-dev-middleware (https://github.com/webpack/webpack-dev-middleware) 并仅使用一台快速服务器来提供 API 和静态文件。

您的代码可能如下所示:

var path = require('path');
var express = require('express');
var webpack = require('webpack');
var config = require('./webpack.config.dev');
// require keys

var app = express();
var compiler = webpack(config);

app.use(require('webpack-dev-middleware')(compiler, 
  noInfo: true,
  publicPath: config.output.publicPath
));

app.use(require('webpack-hot-middleware')(compiler));

app.get('/api', function(req, res) 
    // api logic
)

app.get(/^(?!\/api).*$/, function(req, res) 
  res.sendFile(path.join(__dirname, 'index.html'));
);

app.listen(3000, function(err) 
  if (err) 
    console.log(err);
    return;
  
  console.log('Listening at http://localhost:3000');
);

【讨论】:

以上是关于如何使用 React + Webpack 应用程序存储和访问我的 API 密钥?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用内联 带有webpack的React应用程序中的标签

如何使用 React + Webpack 应用程序存储和访问我的 API 密钥?

如何在使用 webpack 捆绑 React 时禁用严格模式

如何在带有 webpack 的 React 应用程序中包含“leaflet.css”?

如何使用 React、Redux 和 Webpack 实现 Google API

如何在 AWS Elastic Beanstalk 上使用 Nginx、React、Webpack、Gunicorn、PostgreSQL、Django 和 DRF 部署应用程序?如何使用此应用程序处