Cara Menyimpan dan Mengakses Kunci API dalam Aplikasi React

Cara Menyimpan dan Mengakses Kunci API dalam Aplikasi React

Aplikasi web modern mengandalkan API eksternal untuk fungsionalitas tambahan. Beberapa API menggunakan pengidentifikasi seperti kunci dan rahasia untuk mengaitkan permintaan dengan aplikasi tertentu. Kunci ini sensitif dan Anda tidak boleh memasukkannya ke GitHub karena siapa pun dapat menggunakannya untuk mengirim permintaan ke API menggunakan akun Anda.





VIDEO MAKEUSEOF HARI INI

Tutorial ini akan mengajari Anda cara menyimpan dan mengakses kunci API dengan aman di aplikasi React.





Menambahkan Variabel Lingkungan di Aplikasi CRA

SEBUAH React aplikasi yang Anda buat menggunakan buat-reaksi-aplikasi mendukung variabel lingkungan di luar kotak. Ia membaca variabel yang dimulai dengan REACT_APP dan membuatnya tersedia melalui process.env. Ini dimungkinkan karena paket dotenv npm telah diinstal dan dikonfigurasi dalam aplikasi CRA.





Untuk menyimpan kunci API, buat file baru bernama .env di direktori root aplikasi React.

Kemudian, awali nama kunci API dengan REACT_APP seperti ini:



REACT_APP_API_KEY="your_api_key" 

Anda sekarang dapat mengakses kunci API di file apa pun di aplikasi React menggunakan process.env.

const API_KEY = process.env.REACT_APP_API_KEY 

Pastikan Anda menambahkan .env ke file .gitignore untuk mencegah git melacaknya.





Mengapa Anda Tidak Harus Menyimpan Kunci Rahasia di .env

Apa pun yang Anda simpan dalam file .env tersedia untuk umum di build produksi. React menyematkannya dalam file build, yang berarti siapa pun dapat menemukannya dengan memeriksa file aplikasi Anda. Sebagai gantinya, gunakan proxy backend yang memanggil API atas nama aplikasi front-end Anda.

Menyimpan Variabel Lingkungan dalam Kode Backend

Seperti disebutkan di atas, Anda harus membuat aplikasi backend terpisah untuk menyimpan variabel rahasia.





Misalnya, Titik akhir API di bawah ini mengambil data dari URL rahasia.

const apiURL = process.env.API_URL 
app.get('/data', async (req, res) => {
const response = await fetch(apiURL)
const data = response.json()
res.json({data})
})

Panggil titik akhir API ini untuk mengambil dan menggunakan data di ujung depan.

const data = await fetch('http://backend-url/data') 

Sekarang, kecuali Anda mendorong file .env ke GitHub, URL API tidak akan terlihat di file build Anda.

Menggunakan Next.js untuk Menyimpan Variabel Lingkungan

Alternatif lain adalah dengan menggunakan Next.js. Anda dapat mengakses variabel lingkungan pribadi dalam fungsi getStaticProps() .

Fungsi ini berjalan selama waktu pembuatan di server. Jadi variabel lingkungan yang Anda akses di dalam fungsi ini hanya akan tersedia di lingkungan Node.js.

Di bawah ini adalah contoh.

export async function getStaticProps() { 
const res = await fetch(process.env.API_URL)
const data = res.json()
return {props: { data }}
}

Data akan tersedia di halaman melalui alat peraga, dan Anda dapat mengaksesnya sebagai berikut.

function Home({ data }) { 
return (
<div>
// render data
</div>
);
}

Tidak seperti di React, Anda tidak perlu mengawali nama variabel dengan apa pun dan Anda dapat menambahkannya ke file .env seperti ini:

API_URL=https://secret-url/de3ed3f 

Next.js juga memungkinkan Anda membuat titik akhir API di halaman/api map. Kode di titik akhir ini berjalan di server, sehingga Anda dapat menutupi rahasia dari ujung depan.

Misalnya, contoh di atas dapat ditulis ulang dalam halaman/api/getData.js file sebagai rute API.

sembunyikan nomor saya ketika saya menelepon
4B479C8FF1390AFADECE0CFFD337D1B5229075

Anda sekarang dapat mengakses data yang dikembalikan melalui /pages/api/getData.js titik akhir.

Menjaga Rahasia Kunci API

Mendorong API ke GitHub tidak disarankan. Siapa pun dapat menemukan kunci Anda dan menggunakannya untuk membuat permintaan API. Dengan menggunakan file .env yang tidak terlacak, Anda mencegah hal ini terjadi.

Namun, Anda tidak boleh menyimpan rahasia sensitif dalam file .env di kode frontend Anda karena siapa pun dapat melihatnya saat mereka memeriksa kode Anda. Sebagai gantinya, ambil data di sisi server atau gunakan Next.js untuk menutupi variabel pribadi.