这个问题在这里已有答案:
我一直在网上使用一些教程自学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文件中的正确密钥,但显然这不是理想的安全性!
你可以告诉我,我在这里有点新手,但我很想知道解决这个问题的正确方法。提前谢谢了!
Heroku让你设置一些环境变量,更多细节here,你可以用process.env.MY_ENV_VAR
得到它们。
这是建议引用Twelve-Factor App的应用程序的方法。
我对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
变量,它允许您确定您是否在development
,production
,test
...模式下运行
谢谢你。我在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;