隐藏在Heroku上运行的Twitter机器人的公共面向github的API密钥信息? [重复]

问题描述 投票:-1回答:3

我一直在网上使用一些教程自学node.js。我成功制作了一个Twitter机器人并使用Heroku进行部署,一切都很棒。

但是,我的Twitter API密钥包含在config.js文件中,该文件可以在我的Heroku应用程序链接到的github存储库上免费获得。我已经从github中删除了这些敏感数据。

我已经搜索了这方面的答案,发现了许多相互矛盾和混乱的解决方案,希望有人能指导我一个易于理解的解决方案。如果我的API密钥在git上不可用,我在哪里存储它们以及如何指示我的应用程序检索它们?

这是主要的app.js文件,请注意我已经结合了几个不同的教程,所以它的作用是在屏幕上提供“Hello World”输出,还有Tweets“Hello,learning node.js!”在我选择的Twitter帐户上:

const http = require('http');
const port=process.env.PORT || 3000
const server = http.createServer((req, res) => {
res.statusCode = 200;
res.setHeader('Content-Type', 'text/html');
res.end('<h1>Hello World</h1>');
});
server.listen(port,() => {
console.log(`Server running at port `+port);
});

var Twit = require('twit')

var fs = require('fs'),
path = require('path'),
Twit = require('twit'),
config = require(path.join(__dirname, 'config.js'));

var T = new Twit(config);

T.post('statuses/update', { status: 'Hello, learning node.js!' }, 
function(err, data, response) {
  console.log(data)
});

上面引用的config.js文件如下所示:

var config = {
  consumer_key:         'xxx',
  consumer_secret:      'xxx',
  access_token:         'xxx',
  access_token_secret:  'xxx'
}

module.exports = config;

这一切都适用于config.js文件中的正确密钥,但显然这不是理想的安全性!

你可以告诉我,我在这里有点新手,但我很想知道解决这个问题的正确方法。提前谢谢了!

github heroku bots api-key
3个回答
1
投票

Heroku让你设置一些环境变量,更多细节here,你可以用process.env.MY_ENV_VAR得到它们。 这是建议引用Twelve-Factor App的应用程序的方法。


0
投票

我对heroku知之甚少,但我想你可以设置环境变量。

要在dev计算机中访问这些变量,可以将它们设置为.env文件或直接设置在计算机环境变量中。如果你想使用.env文件,那么我想你需要npm dotenv module(显然将.env添加到你的.gitignore)。

例如,您可以使用以下.env文件:

#!/usr/bin/env bash
consumer_key=       'xxx',
consumer_secret=    'xxx',
access_token=       'xxx',
access_token_secret='xxx'

然后你可以使用它们与process.env.VAR_NAME,所以如果你想要消费者的关键,你可以做process.env.consumer_key。通常这些变量被命名为大写。

它也常用于设置NODE_ENV变量,它允许您确定您是否在developmentproductiontest ...模式下运行


0
投票

谢谢你。我在Heroku上添加了环境变量(通过桌面,而不是使用CLI),然后将我的config.js文件更改为:

var config = {
  consumer_key:         process.env.consumer_key,
  consumer_secret:      process.env.consumer_secret,
  access_token:         process.env.access_token,
  access_token_secret:  process.env.access_token_secret
}

module.exports = config;
© www.soinside.com 2019 - 2024. All rights reserved.