Moderne nettapplikasjoner er avhengige av eksterne API-er for ekstra funksjonalitet. Noen API-er bruker identifikatorer som nøkler og hemmeligheter for å knytte forespørsler til en bestemt applikasjon. Disse nøklene er sensitive, og du bør ikke skyve dem til GitHub, da alle kan bruke dem til å sende en forespørsel til API-en ved å bruke kontoen din.

Denne opplæringen vil lære deg hvordan du trygt lagrer og får tilgang til API-nøkler i en React-applikasjon.

Legge til miljøvariabler i en CRA-app

EN Reager-applikasjon som du oppretter ved hjelp avlag-reager-app støtter miljøvariabler ut av boksen. Den leser variabler som begynner med REACT_APP og gjør dem tilgjengelige gjennom process.env. Dette er mulig fordi dotenv npm-pakken kommer installert og konfigurert i en CRA-app.

For å lagre API-nøklene, lag en ny fil kalt .env i rotkatalogen til React-applikasjonen.

Deretter, prefiks API-nøkkelnavnet med REACT_APP som dette:

REACT_APP_API_KEY="din_api_key"

Du kan nå få tilgang til API-nøkkelen i en hvilken som helst fil i React-appen ved å bruke process.env.

konst API_KEY = prosess.env. REACT_APP_API_KEY

Sørg for at du legger til .env i .gitignore-filen for å forhindre at git sporer den.

Hvorfor du ikke bør lagre hemmelige nøkler i .env

Alt du lagrer i en .env-fil er offentlig tilgjengelig i produksjonsbygget. React bygger det inn i byggefilene, noe som betyr at alle kan finne det ved å inspisere appens filer. Bruk i stedet en backend-proxy som kaller opp API-en på vegne av front-end-applikasjonen din.

Lagring av miljøvariabler i backend-koden

Som nevnt ovenfor, må du opprette en egen backend-applikasjon for å lagre hemmelige variabler.

For eksempel API-endepunkt nedenfor henter data fra en hemmelig URL.

konst apiURL = prosess.env. API_URL
app.get('/data', asynkron (req, res) => {
konst svar = avvente hente (apiURL)
konst data = respons.json()
res.json({data})
})

Kall dette API-endepunktet for å hente og bruke dataene i grensesnittet.

konst data = avvente hente('http://backend-url/data')

Nå, med mindre du sender .env-filen til GitHub, vil ikke API-URLen være synlig i byggefilene dine.

Bruke Next.js til å lagre miljøvariabler

Et annet alternativ er å bruke Next.js. Du kan få tilgang til private miljøvariabler i getStaticProps()-funksjonen.

Denne funksjonen kjører under byggetiden på serveren. Så miljøvariablene du får tilgang til i denne funksjonen vil bare være tilgjengelig i Node.js-miljøet.

Nedenfor er et eksempel.

eksportasynkronfunksjongetStaticProps() {
konst res = avvente hente (process.env. API_URL)
konst data = res.json()
komme tilbake {Rekvisitter: { data }}
}

Dataene vil være tilgjengelige på siden via rekvisitter, og du får tilgang til dem som følger.

funksjonHjem({ data }) {
komme tilbake (
<div>
// gjengi data
</div>
);
}

I motsetning til i React, trenger du ikke å prefiksere variabelnavnet med noe, og du kan legge det til i .env-filen slik:

API_URL=https://secret-url/de3ed3f

Next.js lar deg også lage API-endepunkter i sider/api mappe. Kode i disse endepunktene kjører på serveren, slik at du kan maskere hemmeligheter fra grensesnittet.

Eksempelet ovenfor kan for eksempel skrives om i pages/api/getData.js fil som en API-rute.

eksportmisligholdeasynkronfunksjonhandler(krav, res) {
konst svar = avvente hente (process.env. API_URL)
konst data = respons.json()
komme tilbake res.json({data})
}

Du kan nå få tilgang til de returnerte dataene via /pages/api/getData.js endepunkt.

Holde API-nøkler hemmelige

Det er ikke tilrådelig å skyve APIer til GitHub. Hvem som helst kan finne nøklene dine og bruke dem til å sende API-forespørsler. Ved å bruke en usporet .env-fil forhindrer du at dette skjer.

Du bør imidlertid aldri lagre sensitive hemmeligheter i en .env-fil i grensesnittkoden din fordi alle kan se den når de inspiserer koden din. Hent i stedet dataene på serversiden eller bruk Next.js for å maskere private variabler.