Create-react-appで天気アプリを作成しました。 GitHubにコミットできるようにAPIキーを非表示にするにはどうすればよいですか?
現在、キーはApp.jsにあります。const API_KEY = "123456";
免責事項
チュートリアルアプリを作成している場合を除き、クライアント側にapiキーなどの秘密を入れないでください(つまり、Reactアプリ)。
Reactドキュメントから、
WARNING: Do not store any secrets (such as private API keys) in your React app!
Environment variables are embedded into the build, meaning anyone can view them by inspecting your app's files.
元の回答
Arup Rakshitのコメントを詳しく説明するには、
まず、srcフォルダーの外部に.envファイルを作成する必要があります。
それから加えて
REACT_APP_WEATHER_API_KEY=123456
コミットする前に、この.envファイルを除外して、.gitignoreファイルを見つけて.envを追加する必要があります。
これで自由に行くことができます。
.gitignoreファイルに.envを追加することを忘れないでください。
追加:
const API_KEY = process.env.REACT_APP_WEATHER_API_KEY;
Env変数を読み取るには、サーバーを再起動する必要があります。
結局のところ、create-react-appにはそれを支援する組み込み機能がいくつかあります。 George Karametas この洞察に感謝します。その機能にアクセスするには、次のことが必要です。
.env
というファイルを作成します。- your_project_folder
- node_modules
- public
- src
- .env <-- create it here
- .gitignore
- package-lock.json
- package.json
.env
ファイル内で、選択したAPIキー名にREACT_APP_
を追加して割り当てます。create-react-app
ツールは、REACT_APP_
を使用してこれらの変数を識別します。 APIキー名で開始しない場合、create-react-app
は表示されません。
// .env
REACT_APP_API_KEY=your_api_key <-- yes
API_KEY=your_api_key <-- no
// Example (from 이준형's response):
REACT_APP_WEATHER_API_KEY=123456
.env
ファイルを.gitignore
ファイルに追加します。以下の行を追加したら、.gitignore
ファイルを保存し、git status
を実行して、.env
ファイルがgitに新しいファイルとして表示されないようにします。
// .gitignore
# api keys
.env <-- add this line
# dependencies
/node_modules
...
process.env
オブジェクトを介してAPIキーにアクセスします。APIキーにアクセスできることを確認するには、App.js
ファイルに移動し、require
ステートメントの下の上部にconsole.log
を追加します。ファイルを保存してページを再ロードした後、コンソールログにAPIキーが表示されない場合は、Reactサーバーを再起動してください。コードをコミットする前に、コンソールのログ行を必ず削除してください。
// src/App.js
import React, { Component } from 'react';
import './App.css';
console.log(process.env.REACT_APP_WEATHER_API_KEY)
class App extends Component {
...
反応から ドキュメント :
警告:Reactアプリにはシークレット(プライベートAPIキーなど)を保存しないでください!
環境変数はビルドに組み込まれています。つまり、誰でもアプリのファイルを調べることでそれらを表示できます。
ここに私のために働いたものがあります:
ルートフォルダーに.env
を作成しました。そのフォルダー内にキーを追加しました:
REACT_APP_API_KEY_YT = "key"
//I added YT for youtube which is where my api key is from
それから.gitignore
||に行きましたルートディレクトリに.gitignoreがない場合は作成します。 .gitignore内に.envを追加しました
#api key
.env
次に、アプリのjsファイルのルートに戻りました。他の人のためのindex.jsだった私にとっては、おそらくApp.jsです。私はconst API_KEYを作成しました
const API_KEY =`${process.env.REACT_APP_API_KEY_YT}`
コンソールでログを記録することで、機能しているかどうかを確認しました。
console.log("API", API_KEY)
undefined
を取得していました。サーバーを停止し(Control + C
)、サーバーを再起動しました。その後、私は鍵を見ることができました。
残念ながら、gitignoreと.env
ファイルを使用している場合でも、Reactクライアントにキーを保持することは安全ではありません。 @ClaudiuCreangaが指摘したように、React環境変数はビルドに埋め込まれ、一般にアクセス可能です。
Node/ExpressなどのAPIキーまたはシークレットのみをバックエンドに保存する必要があります。クライアントにリクエストをバックエンドAPIに送信させると、APIキーを使用して実際のAPI呼び出しを行い、データをクライアントに送り返すことができます。
それが遅くないことを願っていますので、ここで私がそれをやった方法です。ルートフォルダーで、reactを使用している場合は、REACT_APP_
を環境変数の先頭に追加するため、次のようになります。 REACT_APP_API_KEY=<keye here>
しません。 React環境は.env
を確認し、REACT_APP_
を付加するかどうかを確認してから使用します。
import React from 'React';
console.log(`${process.env.REACT_APP_API_KEY}`);
それはあなたが変数であることを取得します。
ノードを使用している場合、パッケージが必要です https://www.npmjs.com/package/dotenv
それでおしまい。楽しい :)
キーを含むconfig_keys.jsファイルを作成します。デフォルトとしてエクスポート
const API_K = "123456788345345235"
export default API_K
次に、それらをapp.jsまたはターゲット.jsファイルにインポートします
IMPORT API_K from './config_keys/js'
const API_KEY = API_K
config_keys.jsを.gitignoreに追加します
すべての資格情報を使用して個別のファイルを作成し、そこでキーを宣言できます。そして、このファイルを.gitignore
に追加します
//credentials.js
export const API_KEY = '12345'
上記のすべてのメソッドを実行した後、他の誰かが未定義になっている場合は、ほんの少しの追加です。 .envは、クライアント(create-react-app)フォルダーの下ではなく、ルートサーバーの下に配置しました。エラーが発生しました。もちろん、機密データをそこに置くと、特定のセキュリティへの影響があります。