Sodobne spletne aplikacije se zanašajo na zunanje API-je za dodatno funkcionalnost. Nekateri API-ji uporabljajo identifikatorje, kot so ključi in skrivnosti, da povežejo zahteve z določeno aplikacijo. Ti ključi so občutljivi in ​​jih ne smete pošiljati GitHubu, saj jih lahko kdorkoli uporabi za pošiljanje zahteve API-ju z vašim računom.

Ta vadnica vas bo naučila, kako varno shranjevati in dostopati do ključev API v aplikaciji React.

Dodajanje spremenljivk okolja v aplikacijo CRA

A Aplikacija React, ki jo ustvarite z uporabocreate-react-aplikacija podpira spremenljivke okolja takoj po namestitvi. Bere spremenljivke, ki se začnejo z REACT_APP, in jih naredi na voljo prek process.env. To je mogoče, ker je paket dotenv npm nameščen in konfiguriran v aplikaciji CRA.

Če želite shraniti ključe API, ustvarite novo datoteko z imenom .env v korenskem imeniku aplikacije React.

Nato imenu ključa API dodajte predpono z REACT_APP Všečkaj to:

REACT_APP_API_KEY="vaš_api_ključ"

Zdaj lahko dostopate do ključa API v kateri koli datoteki v aplikaciji React z uporabo process.env.

instagram viewer
konst API_KEY = process.env. REACT_APP_API_KEY

Prepričajte se, da dodate .env v datoteko .gitignore, da preprečite, da bi git sledil njej.

Zakaj ne bi smeli shranjevati skrivnih ključev v .env

Vse, kar shranite v datoteko .env, je javno dostopno v produkcijski gradnji. React jo vdela v gradbene datoteke, kar pomeni, da jo lahko vsak najde tako, da pregleda datoteke vaše aplikacije. Namesto tega uporabite zaledni proxy, ki pokliče API v imenu vaše sprednje aplikacije.

Shranjevanje spremenljivk okolja v zaledni kodi

Kot je navedeno zgoraj, morate za shranjevanje skrivnih spremenljivk ustvariti ločeno zaledno aplikacijo.

Na primer, Spodnja končna točka API-ja pridobi podatke s tajnega URL-ja.

konst apiURL = process.env. API_URL
app.get('/data', async (req, res) => {
konst odgovor = čakati pridobi (apiURL)
konst podatki = odziv.json()
res.json({podatki})
})

Pokličite to končno točko API, da pridobite in uporabite podatke v sprednjem delu.

konst podatki = čakati fetch('http://backend-url/data')

Zdaj, razen če potisnete datoteko .env v GitHub, URL API-ja ne bo viden v vaših gradbenih datotekah.

Uporaba Next.js za shranjevanje spremenljivk okolja

Druga možnost je uporaba Next.js. Do spremenljivk zasebnega okolja lahko dostopate v funkciji getStaticProps().

Ta funkcija se izvaja med gradnjo na strežniku. Tako bodo spremenljivke okolja, do katerih dostopate znotraj te funkcije, na voljo samo v okolju Node.js.

Spodaj je primer.

izvozasinhfunkcijogetStaticProps() {
konst res = čakati pridobi (process.env. API_URL)
konst podatki = res.json()
vrnitev {rekviziti: { podatki }}
}

Podatki bodo na strani dostopni prek rekvizitov, do njih pa lahko dostopate na naslednji način.

funkcijodomov({ podatki }) {
vrnitev (
<div>
// upodablja podatke
</div>
);
}

Za razliko od Reacta vam ni treba predpone imena spremenljivke z ničemer in jo lahko dodate v datoteko .env takole:

API_URL=https://secret-url/de3ed3f

Next.js omogoča tudi ustvarjanje končnih točk API-ja v strani/api mapo. Koda v teh končnih točkah se izvaja na strežniku, tako da lahko prikrijete skrivnosti s sprednjega dela.

Na primer, zgornji primer je mogoče prepisati v pages/api/getData.js datoteko kot API pot.

izvozprivzetoasinhfunkcijovodja(zahteva, res) {
konst odgovor = čakati pridobi (process.env. API_URL)
konst podatki = odziv.json()
vrnitev res.json({podatki})
}

Zdaj lahko do vrnjenih podatkov dostopate prek /pages/api/getData.js končna točka.

Ohranjanje tajnosti ključev API

Potiskanje API-jev v GitHub ni priporočljivo. Vsakdo lahko najde vaše ključe in jih uporabi za pošiljanje zahtev API. Z uporabo datoteke .env, ki ji ni sledi, preprečite, da bi se to zgodilo.

Vendar pa občutljivih skrivnosti nikoli ne shranjujte v datoteko .env v kodi čelnega vmesnika, ker jo lahko vidi vsak, ko pregleduje vašo kodo. Namesto tega pridobite podatke na strani strežnika ali uporabite Next.js za maskiranje zasebnih spremenljivk.