Instantly share code, notes, and snippets.

Embed
What would you like to do?
## How to hide API keys from github ##
1. If you have already pushed commits with sensitive data, follow this guide to remove the sensitive info while
retaining your commits: https://help.github.com/articles/remove-sensitive-data/
2. In the terminal, create a config.js file and open it up:
touch config.js
atom config.js
3. In the config file, enter your API keys in an object like so (naming them whatever you like, and putting the keys in
as strings). You don't need any other code in this file:
var config = {
MY_KEY : '123456',
SECRET_KEY : '56789',
KEY_2 : '101010'
}
4. In your HTML file, add a script link to this file BELOW your jQuery script but ABOVE your own script file links:
<script type='text/javascript' src='config.js'></script>
<script type='text/javascript' src='script.js></script>
5. In your javascript/jquery file (probably script.js), declare variables that point to your API keys in the config file
like so. Note that the 'config' here refers to the object called 'config', NOT to the file config.js:
var mykey = config.MY_KEY;
var secretkey = config.SECRET_KEY;
6. Be sure to replace every instance of the API keys with these new variables.
E.g. if you had:
url: 'https//www.whatever.com/?query&sig=12345'
Now you will have:
url: 'https://www.whatever.com/?query&sig=' + mykey
7. In the terminal create a .gitignore file and open in atom. Note the period at the start of the file name:
touch .gitignore
atom .gitignore
8. In the .gitignore file, enter any file names that you want git NOT to track/commit/push. No other code is necessary.
In this case you would enter:
config.js
9. Type git st. You should see the .gitignore file ready to be tracked. You should NOT see the config.js file.
10. git add ., and git st again. Make sure the config.js file didn't get added. If everything looks good, you're ready
to commit and push.
@bkrall

This comment has been minimized.

Show comment
Hide comment
@bkrall

bkrall Dec 1, 2016

Think I'm missing something, when you deploy, how is this file accessed when it's not in version control?

bkrall commented Dec 1, 2016

Think I'm missing something, when you deploy, how is this file accessed when it's not in version control?

@ericjenkinson

This comment has been minimized.

Show comment
Hide comment
@ericjenkinson

ericjenkinson Jan 2, 2017

@bkrall: The file would have to be recreated manually. The intent of the instructions is to hide an API key used in code hosted on github that is open to the public. The README.md should have notice informing the user of the hidden API key and how to recreate the file.

ericjenkinson commented Jan 2, 2017

@bkrall: The file would have to be recreated manually. The intent of the instructions is to hide an API key used in code hosted on github that is open to the public. The README.md should have notice informing the user of the hidden API key and how to recreate the file.

@ayunav

This comment has been minimized.

Show comment
Hide comment
@ayunav

ayunav Jan 6, 2017

@derzorngottes: This is awesome and super helpful! Thanks so much for posting this!

ayunav commented Jan 6, 2017

@derzorngottes: This is awesome and super helpful! Thanks so much for posting this!

@niko79542

This comment has been minimized.

Show comment
Hide comment
@niko79542

niko79542 Mar 12, 2017

.Gitignoring will hide key from github, but should we be worried about making API call from JavaScript. Is it the key vulnerable? Or is that not something to worry about for a small JavaScript app.

niko79542 commented Mar 12, 2017

.Gitignoring will hide key from github, but should we be worried about making API call from JavaScript. Is it the key vulnerable? Or is that not something to worry about for a small JavaScript app.

@LosEagle

This comment has been minimized.

Show comment
Hide comment
@LosEagle

LosEagle May 12, 2017

This would be great if every single user of your app didn't have to generate his own api key and add it to config file.

LosEagle commented May 12, 2017

This would be great if every single user of your app didn't have to generate his own api key and add it to config file.

@brianAround

This comment has been minimized.

Show comment
Hide comment
@brianAround

brianAround Jun 23, 2017

If you want to share your API key to the world... then don't bother hiding it. With some services this sounds like a good way to get your API key disabled.

brianAround commented Jun 23, 2017

If you want to share your API key to the world... then don't bother hiding it. With some services this sounds like a good way to get your API key disabled.

@gentlefox

This comment has been minimized.

Show comment
Hide comment
@gentlefox

gentlefox Aug 3, 2017

Reference config.js from your user directory - such as ~/.ssh/webassets.js, which allows everyone in a team to have the same configuration while potentially having distinctly unique values for each of the variables.

A third-party way of setting all this up is to use dotenv.
The developers are Followers of the 12-Factor App

When it comes to deployment, you can apply all these values as part of your CI process (Settings > Environment Variables).
Assigning these values would then be as:

    var mykey = process.env.MY_KEY || config.MY_KEY;
    var secretkey = process.env.SECRET_KEY || config.SECRET_KEY;

Alternatively:

    var mykey = 'some-default-string';
    var env = process.env.NODE_ENV || 'development';

    if (env === 'development') {
        mykey = config.MY_KEY;
        ...
    }
    if (env === 'production') {
        mykey = process.env.MY_KEY;
        ...
    }

EDIT: 12 Factor + dotenv references add.

gentlefox commented Aug 3, 2017

Reference config.js from your user directory - such as ~/.ssh/webassets.js, which allows everyone in a team to have the same configuration while potentially having distinctly unique values for each of the variables.

A third-party way of setting all this up is to use dotenv.
The developers are Followers of the 12-Factor App

When it comes to deployment, you can apply all these values as part of your CI process (Settings > Environment Variables).
Assigning these values would then be as:

    var mykey = process.env.MY_KEY || config.MY_KEY;
    var secretkey = process.env.SECRET_KEY || config.SECRET_KEY;

Alternatively:

    var mykey = 'some-default-string';
    var env = process.env.NODE_ENV || 'development';

    if (env === 'development') {
        mykey = config.MY_KEY;
        ...
    }
    if (env === 'production') {
        mykey = process.env.MY_KEY;
        ...
    }

EDIT: 12 Factor + dotenv references add.

@MurphyPicard

This comment has been minimized.

Show comment
Hide comment
@MurphyPicard

MurphyPicard Sep 5, 2017

@derzorngottes: This is awesome and super helpful! Thanks so much for posting this!

MurphyPicard commented Sep 5, 2017

@derzorngottes: This is awesome and super helpful! Thanks so much for posting this!

@briancodes

This comment has been minimized.

Show comment
Hide comment
@briancodes

briancodes Oct 8, 2017

Wouldn't browser users have access to the config variables via DevTools when the web app is deployed?

briancodes commented Oct 8, 2017

Wouldn't browser users have access to the config variables via DevTools when the web app is deployed?

@yoobin2486

This comment has been minimized.

Show comment
Hide comment
@yoobin2486

yoobin2486 May 24, 2018

You have to fix the 23rd line. <script type='text/javascript' src='script.js> -> <script type='text/javascript' src='script.js'>

yoobin2486 commented May 24, 2018

You have to fix the 23rd line. <script type='text/javascript' src='script.js> -> <script type='text/javascript' src='script.js'>

@gavin90210

This comment has been minimized.

Show comment
Hide comment
@gavin90210

gavin90210 Jun 25, 2018

@briancodes Yes, you are correct. Instead I would call config.js through your back-end program so none of the sensitive data is exposed. Any API keys that are designed to be coded onto a .html file according to the api's documentation are safe to display to the public. 😄

gavin90210 commented Jun 25, 2018

@briancodes Yes, you are correct. Instead I would call config.js through your back-end program so none of the sensitive data is exposed. Any API keys that are designed to be coded onto a .html file according to the api's documentation are safe to display to the public. 😄

@pnambu002c

This comment has been minimized.

Show comment
Hide comment
@pnambu002c

pnambu002c Aug 17, 2018

@derzorngottes I am sorry looks like i am missing something. I am not sure if there is a command git st. And also I still see config file after i gave the file name in .gitgnore. Can someone help me?

pnambu002c commented Aug 17, 2018

@derzorngottes I am sorry looks like i am missing something. I am not sure if there is a command git st. And also I still see config file after i gave the file name in .gitgnore. Can someone help me?

@dan3lson

This comment has been minimized.

Show comment
Hide comment
@dan3lson

dan3lson Aug 29, 2018

@pnambu002c Try typing out git status to see which files are ready to be committed and which files are ignored with that .gitignore file. If you see that the config.js file is being untracked, you should be good to go.

dan3lson commented Aug 29, 2018

@pnambu002c Try typing out git status to see which files are ready to be committed and which files are ignored with that .gitignore file. If you see that the config.js file is being untracked, you should be good to go.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment