Skip to content

Commit 313e472

Browse files
JBallinianschmitz
authored andcommitted
[docs] Warn/clarify that env vars are NOT "SECRET" (#6062)
* [docs] Warn about storing secrets in env vars Fixes #5676 Co-Authored-By: Ian Schmitz <[email protected]> * [docs] Add NOT to REACT_APP_SECRET_CODE Fixes #5676 * [docs] Remove line breaks
1 parent 42ed676 commit 313e472

File tree

1 file changed

+17
-23
lines changed

1 file changed

+17
-23
lines changed

Diff for: docusaurus/docs/adding-custom-environment-variables.md

+17-23
Original file line numberDiff line numberDiff line change
@@ -6,54 +6,49 @@ sidebar_label: Environment Variables
66

77
> Note: this feature is available with `[email protected]` and higher.
88
9-
Your project can consume variables declared in your environment as if they were declared locally in your JS files. By
10-
default you will have `NODE_ENV` defined for you, and any other environment variables starting with
11-
`REACT_APP_`.
9+
Your project can consume variables declared in your environment as if they were declared locally in your JS files. By default you will have `NODE_ENV` defined for you, and any other environment variables starting with `REACT_APP_`.
10+
11+
> WARNING: Do not store any secrets (such as private API keys) in your React app!
12+
>
13+
> Environment variables are embedded into the build, meaning anyone can view them by inspecting your app's files.
1214
1315
**The environment variables are embedded during the build time**. Since Create React App produces a static HTML/CSS/JS bundle, it can’t possibly read them at runtime. To read them at runtime, you would need to load HTML into memory on the server and replace placeholders in runtime, just like [described here](title-and-meta-tags.md#injecting-data-from-the-server-into-the-page). Alternatively you can rebuild the app on the server anytime you change them.
1416

1517
> Note: You must create custom environment variables beginning with `REACT_APP_`. Any other variables except `NODE_ENV` will be ignored to avoid accidentally [exposing a private key on the machine that could have the same name](https://github.com/facebook/create-react-app/issues/865#issuecomment-252199527). Changing any environment variables will require you to restart the development server if it is running.
1618
17-
These environment variables will be defined for you on `process.env`. For example, having an environment
18-
variable named `REACT_APP_SECRET_CODE` will be exposed in your JS as `process.env.REACT_APP_SECRET_CODE`.
19+
These environment variables will be defined for you on `process.env`. For example, having an environment variable named `REACT_APP_NOT_SECRET_CODE` will be exposed in your JS as `process.env.REACT_APP_NOT_SECRET_CODE`.
1920

2021
There is also a special built-in environment variable called `NODE_ENV`. You can read it from `process.env.NODE_ENV`. When you run `npm start`, it is always equal to `'development'`, when you run `npm test` it is always equal to `'test'`, and when you run `npm run build` to make a production bundle, it is always equal to `'production'`. **You cannot override `NODE_ENV` manually.** This prevents developers from accidentally deploying a slow development build to production.
2122

22-
These environment variables can be useful for displaying information conditionally based on where the project is
23-
deployed or consuming sensitive data that lives outside of version control.
23+
These environment variables can be useful for displaying information conditionally based on where the project is deployed or consuming sensitive data that lives outside of version control.
2424

25-
First, you need to have environment variables defined. For example, let’s say you wanted to consume a secret defined
26-
in the environment inside a `<form>`:
25+
First, you need to have environment variables defined. For example, let’s say you wanted to consume an environment variable inside a `<form>`:
2726

2827
```jsx
2928
render() {
3029
return (
3130
<div>
3231
<small>You are running this application in <b>{process.env.NODE_ENV}</b> mode.</small>
3332
<form>
34-
<input type="hidden" defaultValue={process.env.REACT_APP_SECRET_CODE} />
33+
<input type="hidden" defaultValue={process.env.REACT_APP_NOT_SECRET_CODE} />
3534
</form>
3635
</div>
3736
);
3837
}
3938
```
4039

41-
During the build, `process.env.REACT_APP_SECRET_CODE` will be replaced with the current value of the `REACT_APP_SECRET_CODE` environment variable. Remember that the `NODE_ENV` variable will be set for you automatically.
40+
During the build, `process.env.REACT_APP_NOT_SECRET_CODE` will be replaced with the current value of the `REACT_APP_NOT_SECRET_CODE` environment variable. Remember that the `NODE_ENV` variable will be set for you automatically.
4241

4342
When you load the app in the browser and inspect the `<input>`, you will see its value set to `abcdef`, and the bold text will show the environment provided when using `npm start`:
4443

4544
```html
4645
<div>
4746
<small>You are running this application in <b>development</b> mode.</small>
48-
<form>
49-
<input type="hidden" value="abcdef" />
50-
</form>
47+
<form><input type="hidden" value="abcdef" /></form>
5148
</div>
5249
```
5350

54-
The above form is looking for a variable called `REACT_APP_SECRET_CODE` from the environment. In order to consume this
55-
value, we need to have it defined in the environment. This can be done using two ways: either in your shell or in
56-
a `.env` file. Both of these ways are described in the next few sections.
51+
The above form is looking for a variable called `REACT_APP_NOT_SECRET_CODE` from the environment. In order to consume this value, we need to have it defined in the environment. This can be done using two ways: either in your shell or in a `.env` file. Both of these ways are described in the next few sections.
5752

5853
Having access to the `NODE_ENV` is also useful for performing actions conditionally:
5954

@@ -82,27 +77,26 @@ Note that the caveats from the above section apply:
8277

8378
## Adding Temporary Environment Variables In Your Shell
8479

85-
Defining environment variables can vary between OSes. It’s also important to know that this manner is temporary for the
86-
life of the shell session.
80+
Defining environment variables can vary between OSes. It’s also important to know that this manner is temporary for the life of the shell session.
8781

8882
### Windows (cmd.exe)
8983

9084
```cmd
91-
set "REACT_APP_SECRET_CODE=abcdef" && npm start
85+
set "REACT_APP_NOT_SECRET_CODE=abcdef" && npm start
9286
```
9387

9488
(Note: Quotes around the variable assignment are required to avoid a trailing whitespace.)
9589

9690
### Windows (Powershell)
9791

9892
```Powershell
99-
($env:REACT_APP_SECRET_CODE = "abcdef") -and (npm start)
93+
($env:REACT_APP_NOT_SECRET_CODE = "abcdef") -and (npm start)
10094
```
10195

10296
### Linux, macOS (Bash)
10397

10498
```bash
105-
REACT_APP_SECRET_CODE=abcdef npm start
99+
REACT_APP_NOT_SECRET_CODE=abcdef npm start
106100
```
107101

108102
## Adding Development Environment Variables In `.env`
@@ -112,7 +106,7 @@ REACT_APP_SECRET_CODE=abcdef npm start
112106
To define permanent environment variables, create a file called `.env` in the root of your project:
113107

114108
```
115-
REACT_APP_SECRET_CODE=abcdef
109+
REACT_APP_NOT_SECRET_CODE=abcdef
116110
```
117111

118112
> Note: You must create custom environment variables beginning with `REACT_APP_`. Any other variables except `NODE_ENV` will be ignored to avoid [accidentally exposing a private key on the machine that could have the same name](https://github.com/facebook/create-react-app/issues/865#issuecomment-252199527). Changing any environment variables will require you to restart the development server if it is running.

0 commit comments

Comments
 (0)