API密钥在我的公共git存储库中公开为“字符串”

时间:2018-07-18 16:16:40

标签: javascript reactjs

我的git仓库中有这样的代码,但这不是一个好主意,因为我的API密钥以字符串形式公开,每个人都可以看到。

所以我的问题是如何处理这个问题?是否应该将此API密钥保存到* .txt文件并导入此字符串?并将这个txt文件添加到.gitignore文件吗?

您能建议解决该问题的正确方法是什么吗?

import axios from 'axios';

export const FETCH_LOCATION = 'FETCH_LOCATION';
export const FETCH_WEATHER = 'FETCH_WEATHER';
export const HISTORY_SELECTED = 'HISTORY_SELECTED';
export const SHOW_INFO = 'SHOW_INFO';
const API_KEY_GOOGLE = 'string';
const API_KEY_WUNDERGROUND = 'string';

export function fetchLocation(city) {
  const urlGoogle = `https://maps.googleapis.com/maps/api/geocode/json?address=${city}&key=${API_KEY_GOOGLE}`;
  const request = axios.get(urlGoogle);

1 个答案:

答案 0 :(得分:2)

一种常见的做法是使用.env文件,并忽略.gitignore中的.env。您将这些文件加载​​到process.env中。您可以使用名为dotenv的软件包。

例如,如果我需要Google API,我会创建一个文件调用.env,然后将其存储为

GOOGLEAPIKEY=asdfewvger343sdfasdf 

如果要使用webpack加载它,则将其添加为插件

import DotEnvPlugin from 'webpack-dotenv-plugin';

plugins: [
    new DotenvPlugin({
      sample: './.env.default',
      path: './.env.dev',
    }),
... 
]

或者您也可以使用dotenv

require('dotenv').config()

这将从您的根目录加载.env文件,而无需进行配置。

详细了解 https://github.com/motdotla/dotenv

在您的应用中,您将使用googleapi,例如process.env.GOOGLEAPIKEY

 const data = await axios
      .post(`localhost:3000/api/helloworld/${process.env.GOOGLEAPIKEY}`)
      .send(data.fetchData);