Moderní webové aplikace spoléhají na externí rozhraní API pro další funkce. Některá rozhraní API používají identifikátory, jako jsou klíče a tajné klíče, k přiřazení požadavků ke konkrétní aplikaci. Tyto klíče jsou citlivé a neměli byste je odesílat na GitHub, protože by je mohl kdokoli použít k odeslání požadavku do API pomocí vašeho účtu.

Tento tutoriál vás naučí, jak bezpečně ukládat klíče API a přistupovat k nim v aplikaci React.

Přidání proměnných prostředí do aplikace CRA

A Aplikace React, kterou vytvořítecreate-react-app podporuje proměnné prostředí ihned po vybalení. Čte proměnné, které začínají REACT_APP, a zpřístupňuje je prostřednictvím process.env. To je možné, protože balíček dotenv npm je nainstalován a nakonfigurován v aplikaci CRA.

Chcete-li uložit klíče API, vytvořte nový soubor s názvem .env v kořenovém adresáři aplikace React.

Potom zadejte předponu názvu klíče API s REACT_APP takhle:

REACT_APP_API_KEY="your_api_key"

Nyní máte přístup ke klíči API v libovolném souboru v aplikaci React pomocí process.env.

konst API_KEY = process.env. REACT_APP_API_KEY

Ujistěte se, že jste do souboru .gitignore přidali .env, aby jej git nemohl sledovat.

Proč byste neměli ukládat tajné klíče v .env

Vše, co uložíte do souboru .env, je veřejně dostupné v produkčním sestavení. React jej vloží do souborů sestavení, což znamená, že jej kdokoli může najít kontrolou souborů vaší aplikace. Místo toho použijte back-end proxy, který volá API jménem vaší front-endové aplikace.

Ukládání proměnných prostředí v kódu backendu

Jak bylo uvedeno výše, musíte vytvořit samostatnou backendovou aplikaci pro ukládání tajných proměnných.

Například, Koncový bod API níže načítá data z tajné adresy URL.

konst apiURL = process.env. API_URL
app.get('/data', async (req, res) => {
konst odpověď = čekat načíst (apiURL)
konst data = response.json()
res.json({data})
})

Chcete-li načíst a použít data v rozhraní frontend, zavolejte tento koncový bod rozhraní API.

konst údaje = čekat načíst('http://backend-url/data')

Nyní, pokud neodešlete soubor .env na GitHub, URL API nebude viditelná v souborech sestavení.

Použití Next.js k ukládání proměnných prostředí

Další alternativou je použití Next.js. K privátním proměnným prostředí můžete přistupovat ve funkci getStaticProps().

Tato funkce běží během doby sestavení na serveru. Proměnné prostředí, ke kterým přistupujete v rámci této funkce, budou tedy dostupné pouze v prostředí Node.js.

Níže je uveden příklad.

vývozníasynchronnífunkcegetStaticProps() {
konst res = čekat načíst (process.env. API_URL)
konst data = res.json()
vrátit se {rekvizity: { data }}
}

Data budou dostupná na stránce prostřednictvím rekvizit a můžete k nim přistupovat následovně.

funkceDomov({ data }) {
vrátit se (
<div>
// vykreslení dat
</div>
);
}

Na rozdíl od Reactu nemusíte před název proměnné nic přidávat a můžete ji přidat do souboru .env takto:

API_URL=https://secret-url/de3ed3f

Next.js také umožňuje vytvářet koncové body API v stránky/api složku. Kód v těchto koncových bodech běží na serveru, takže můžete maskovat tajemství z frontendu.

Například výše uvedený příklad může být přepsán v pages/api/getData.js soubor jako trasa API.

vývoznívýchozíasynchronnífunkcepsovod(req, req) {
konst odpověď = čekat načíst (process.env. API_URL)
konst data = response.json()
vrátit se res.json({data})
}

Nyní máte přístup k vráceným datům prostřednictvím /pages/api/getData.js koncový bod.

Uchování klíčů API v tajnosti

Posílat API na GitHub se nedoporučuje. Kdokoli může najít vaše klíče a použít je k vytváření požadavků API. Použitím nesledovaného souboru .env tomu zabráníte.

Nikdy byste však neměli ukládat citlivá tajemství do souboru .env v kódu frontendu, protože je může vidět kdokoli, když kontroluje váš kód. Místo toho načtěte data na straně serveru nebo použijte Next.js k maskování soukromých proměnných.