‫Narator: Sejauh ini dalam implementasi otentikasi
‫kami, kami telah memasukkan pengguna dengan kata sandi yang benar.
‫Jadi pada dasarnya kami menyelesaikan langkah pertama dari
‫alur kerja otentikasi ini
‫di mana token web JSON dibuat
‫dan dikirim kembali ke klien jika pengguna
‫memberikan email dan kata sandi yang benar.
‫Jadi selanjutnya kita akan benar-benar menerapkan rute yang dilindungi.
‫Jadi pada dasarnya menggunakan token web JSON yang
‫dibuat untuk memberi pengguna yang masuk akses ke rute yang dilindungi.
‫Dan ini adalah langkah kedua otentikasi.
‫Jadi sekarang mari kita lanjutkan dan implementasikan fungsi ini.
‫Jadi katakanlah kita ingin
‫melindungi rute getAllTours.
‫Jadi pada dasarnya hanya mengizinkan pengguna yang
‫masuk untuk mendapatkan akses ke daftar semua tur kami.
‫Dan apa artinya sebelum menjalankan handler
‫get all tours, jadi mari
‫kita lihat itu.
‫Oke, jadi sebelum menjalankan pegangan ini di
‫sini, kita perlu melakukan beberapa
‫pemeriksaan untuk memverifikasi
‫apakah pengguna benar-benar masuk atau tidak, bukan?
‫Jadi cara terbaik untuk
‫melakukannya seperti yang mungkin sudah
‫Anda ketahui saat ini, adalah dengan menggunakan fungsi middleware, oke?
‫Jadi dalam video ini,
‫untuk melindungi rute, kita akan membuat
‫fungsi middleware yang akan dijalankan sebelum masing-masing handler ini, oke.
‫Jadi fungsi yang akan duduk di sini,
‫jadi sebelum fungsi ini di sini bisa berjalan.
‫Dan middleware ini kemudian akan mengembalikan
‫kesalahan jika pengguna tidak diautentikasi,
‫jadi jika dia
‫tidak login, atau akan memanggil
‫middleware berikutnya yang dalam hal ini adalah handler getAllTours, bukan?
‫Dan itu efektif melindungi rute ini
‫dari akses yang tidak sah.
‫Jadi mari kita lanjutkan dan dengan
‫cepat membuat fungsi middleware itu
‫dan meletakkannya di
‫sini untuk mengilustrasikan apa yang baru saja saya katakan.
‫Oke, jadi di sini di pengontrol auth kami
‫lagi kami akan membuat fungsi middleware
‫baru dan itu disebut melindungi.
‫Baiklah,
‫dan seperti sebelumnya saya akan menggunakan
‫catchAsync karena sekali lagi semua fungsi
‫ini sebenarnya adalah fungsi async.
‫Baiklah, dan kemudian di sini tentu saja, fungsi middleware
‫kita dan untuk saat ini mari kita panggil
‫next here saja agar kita benar-benar memiliki tubuh
‫apa pun di sini dalam
‫fungsi middleware ini dan kemudian mari kembali ke
‫rute tur kita dan kemudian lindungi rute ini, oke ?
‫Jadi pertama-tama saya harus benar-benar membutuhkan modul
‫pengontrol otentikasi ini.
‫Jadi
‫const dan kemudian memerlukannya
‫di pengontrol,
‫dan kemudian authController, oke.
‫Jadi sekarang mari kita
‫pasang, di sini di rute getAllTours.
‫Oke.
‫Jadi authController. melindungi.
‫Oke.
‫Dan saat ini fungsi middleware ini akan dijalankan
‫terlebih dahulu, jika pengguna tidak diautentikasi maka akan
‫terjadi kesalahan.
‫Dan tentu saja middleware
‫berikutnya sehingga yang
‫benar-benar mendapatkan dan mengirim semua tur tidak akan dieksekusi.
‫Oke.
‫Dan sekali lagi, ini akan secara efektif melindungi akses
‫ke sumber daya ini di sini dari pengguna yang tidak masuk.
‫Baiklah, jadi mari kita kembali ke sini.
‫Bukan rute
‫pengguna, tetapi pengontrol auth.
‫Baiklah, dan sekarang tentang penerapan middleware
‫pelindung ini.
‫Apa sebenarnya yang harus kita lakukan?
‫Baiklah, mari kita mulai dengan menjelaskan beberapa langkah di sini.
‫Baiklah, dan sebenarnya pertama-tama kita perlu menandai fungsi
‫ini sebagai Async, jika tidak, kita tidak
‫akan membutuhkan catchAsync, bukan?
‫Dan Anda akan melihat mengapa kita perlu ini menjadi
‫fungsi Async dalam sedetik, oke?
‫Tapi sekarang mari kita paparkan langkah-langkah
‫yang perlu kita ambil untuk menerapkan middleware pelindung ini.
‫Jadi seperti sebelumnya, saya
‫akan menempatkan langkah-langkah ini di sini sebagai komentar.
‫Pertama kita harus benar-benar mendapatkan token.
‫Dan
‫periksa apakah pada dasarnya ada,
‫jadi periksa apakah ada.
‫Kemudian selanjutnya kita perlu memvalidasi token.
‫Jadi ini pada dasarnya adalah langkah super
‫penting yang telah kita bicarakan sebelumnya di mana algoritma JWT memverifikasi apakah
‫tanda tangan itu valid atau
‫tidak.
‫Jadi karena itu apakah token itu valid atau tidak, oke?
‫Jadi sebenarnya mari kita sebut ini di sini verifikasi.
‫Saya pikir itulah yang kami sebut di slide di mana
‫kami berbicara tentang ini sebelumnya, baiklah.
‫Dan jika Anda tidak begitu ingat bagaimana cara
‫kerjanya, Anda dapat
‫selalu kembali dan menonton kembali ceramah itu, oke?
‫Kemudian selanjutnya, jadi jika verifikasi benar-benar berhasil maka kita juga
‫perlu memeriksa apakah pengguna yang mencoba mengakses
‫rute itu masih ada, oke?
‫Jadi periksa apakah pengguna masih ada, dan saya akan
‫berbicara lebih banyak tentang
‫mengapa setiap langkah ini diperlukan setelah kita mulai menerapkannya, oke?
‫Jadi untuk sekarang ini mungkin tidak begitu masuk akal bagi Anda,
‫tetapi sekali lagi saya akan berbicara tentang setiap pemberhentian begitu kita sampai di sana.
‫Baiklah?
‫Dan akhirnya kita juga
‫perlu
‫memeriksa apakah pengguna
‫mengubah kata sandi
‫setelah JWT dikeluarkan, oke?
‫Nah, anggap saja token
‫di sini, kami menyebutnya token di tempat lain, oke?
‫Dan hanya jika tidak ada masalah
‫di salah satu langkah ini
‫di sini saja maka selanjutnya akan dipanggil yang kemudian
‫akan mendapatkan akses ke rute yang kita lindungi.
‫Jadi dalam contoh kita saat ini, sekali lagi, handler getAllTours ini.
‫Benar?
‫Oke, tapi mari kita
‫kembali dan mulai menerapkan langkah pertama kita di sini.
‫Jadi pada dasarnya mendapatkan token
‫dan kemudian memeriksa apakah itu benar-benar ada.
‫Jadi praktik umum adalah mengirim token menggunakan header http
‫dengan permintaan, oke?
‫Jadi mari kita lihat bagaimana kita bisa mengatur header di Postman
‫untuk mengirimnya bersama dengan permintaan
‫dan kemudian juga bagaimana kita bisa mendapatkan
‫akses ke header ini di Express.
‫Dan mari kita lakukan yang pertama.
‫Jadi di sini di apt. js Saya pikir kami memiliki middleware
‫yang bagus di sini, jadi di sini mari kita
‫masuk ke permintaan konsol. headers, Oke, jadi
‫kita sudah membicarakan tentang http header sebelumnya,
‫jadi beginilah cara kita bisa mengaksesnya di Express.
‫Oke, jadi pada dasarnya ke header permintaan,
‫jadi yang bisa dikirim klien bersama dengan permintaan mereka.
‫Oke, dan di sini di Postman, sekarang mari kita
‫ke rute yang sebenarnya ingin kita lindungi.
‫Dan kemudian di sini mengatur header.
‫Dan mari kita
‫lakukan tes satu dan atur ke jonas, oke?
‫Sekarang saya hanya akan
‫mengirim ini dan di sini di Express, mari kita lihat itu.
‫Dan memang di sini kita mendapatkan objek dengan semua header
‫yang merupakan bagian dari permintaan.
‫Jadi semua ini di sini.
‫Dan Anda lihat ada banyak header
‫yang dikirim oleh Postman secara otomatis bersama
‫dengan permintaan, misalnya, agen pengguna adalah Postman, ia juga
‫mengirim host, dan beberapa lainnya
‫yang akan kita bicarakan nanti seperti
‫menerima misalnya.
‫Nah yang penting disini sebenarnya header yang
‫kita atur sendiri.
‫Oke, jadi header pengujian disetel ke jonas yang baru saja
‫kami kirimkan dalam permintaan kami.
‫Sekarang untuk mengirim token web JSON sebagai header, sebenarnya
‫ada standar untuk melakukan itu.
‫Jadi mari kita kembali ke sini, singkirkan semua ini.
‫Dan standar untuk mengirim token adalah kita harus selalu
‫menggunakan header yang disebut otorisasi.
‫Oke?
‫Jadi seperti ini dan
‫kemudian nilai header itu harus selalu dimulai
‫dengan Bearer, oke?
‫Karena pada dasarnya kita menanggung, kita memiliki, kita memiliki token ini dan kemudian
‫di sini nilai dari token tersebut.
‫Jadi seperti string acak yang kita dapatkan sebelumnya.
‫Jadi biarkan saja dia di sini sebagai contoh, jadi mari
‫kita kirimkan itu sekarang.
‫Dan kemudian memang, kita harus mendapatkannya di sini.
‫Oke.
‫Sekarang Express kemudian secara otomatis mengubah semua nama header menjadi
‫huruf kecil, seperti yang Anda lihat
‫di sini, tetapi tentu saja, nilai header kami di sini masih sama.
‫Oke, dan pada dasarnya bagian dari nilai header ini
‫adalah token kita.
‫Dan begitulah seharusnya kita
‫sekarang membaca token itu dari header.
‫Baiklah?
‫Jadi jika sebenarnya
‫ada req. header. otorisasi, oke, dan
‫jika itu dimulai
‫pada dasarnya dengan string pembawa ini di sini oke, jadi
‫req. header. otorisasi dan sekarang
‫ini adalah string dan
‫jadi kita bisa menggunakan startWith
‫di sana oke, jadi ini JavaScript normal lagi
‫oke.
‫Jadi ini adalah kondisi di mana kita benar-benar
‫ingin menyimpan token, oke?
‫Jadi, sekali lagi, jika header
‫itu ada dan nilainya dimulai dengan Bearer, oke.
‫Kemudian dalam hal ini kami ingin mengatakan bahwa token sama
‫dengan req. header. otorisasi dan
‫sekarang bagaimana kita benar-benar mendapatkan bagian kedua
‫dari string ini?
‫Nah, pada dasarnya kita akan membagi string
‫dengan karakter spasi ini, oke, yang kemudian
‫akan membuat array dengan
‫Bearer ini
‫dan dengan token ini dan kemudian
‫kita akan mengambil bagian dari
‫array yang kita inginkan.
‫Jadi pisahkan menggunakan spasi, dan
‫kemudian dari array itu kita menginginkan elemen kedua.
‫Baiklah?
‫Sekarang kita tidak dapat benar-benar mendefinisikan variabel di dalam blok
‫if karena
‫const, dan let, sehingga
‫deklarasi variabel ES6 yang baru sebenarnya adalah cakupan
‫blok, dan jadi apa
‫pun yang kita definisikan di blok ini di
‫sini tidak akan tersedia di luarnya.
‫Oke, jadi mari kita lakukan itu di luar.
‫Dan kemudian cukup tetapkan kembali nilai ini ke token.
‫Oke.
‫Dan sekarang, mari kita log token ke konsol hanya
‫untuk melihat apakah itu berfungsi.
‫Oke, dan sebenarnya mari kita benar-benar mendapatkan token
‫nyata di sini.
‫Jadi yang baru saja kita masuki.
‫Dan kemudian letakkan yang itu di sini, baiklah.
‫Jadi
‫kirimkan, dan ah!
‫Ini dia.
‫Jadi di sini kami memiliki data token web JSON kami yang baru saja kami
‫kirim bersama dengan permintaan.
‫Langsung saja kita matikan console log ini disini.
‫Baiklah, dan sebelum kita melanjutkan, mari kita
‫periksa apakah token itu benar-benar ada.
‫Oke.
‫Jadi jika tidak ada
‫token yah, maka tentu kita ingin membuat error baru.
‫Benar, dan seperti sebelum kita
‫kembali dari middleware ini dan
‫memanggil yang berikutnya, oke.
‫Dan sekarang di sini, kita akan membuat kesalahan dan
‫kita akan langsung
‫beralih ke middleware penanganan kesalahan global dengan kesalahan ini.
‫Baiklah, jadi jika tidak ada token yang dikirim dengan permintaan,
‫itu berarti kita belum login.
‫Jadi mari kita kirim ke pengguna Anda tidak
‫masuk.
‫Silakan masuk untuk mendapatkan akses.
‫Baiklah, dan sekarang kode
‫status untuk situasi seperti ini adalah
‫401 yang artinya tidak sah, oke?
‫Tidak yakin apakah kami pernah menggunakan yang
‫itu sebelumnya dan ya, sebenarnya kami juga melakukannya di sini.
‫Oke, jadi ini pada
‫dasarnya berarti bahwa data yang dikirim dalam permintaan itu benar,
‫tetapi pada dasarnya data itu tidak cukup untuk mendapatkan
‫akses pengguna ke sumber daya yang dia minta.
‫Baiklah.
‫Simpan saja
‫di sini dan uji lagi.
‫Jadi, jika pada dasarnya kita menghilangkan header ini di sini,
‫maka kita harus langsung masuk ke kesalahan
‫itu, bukan?
‫Dan memang, Anda belum masuk, silakan masuk
‫untuk mendapatkan akses.
‫Dengan 401 tidak sah.
‫Besar! Jadi bagian itu sudah bekerja.
‫Baiklah, dan sekarang hanya untuk rekap, jadi
‫saat ini kami tidak mengirim token apa pun bersama
‫dengan permintaan, kan?
‫Dan karena alasan itu, tentu saja, tidak ada token, oke?
‫Dan karena itu kami membuat
‫kesalahan ini, yang kemudian akan memicu middleware penangan kesalahan kami
‫untuk mengirim kesalahan itu kembali ke klien, oke?
‫Dan tentu saja kita tidak mendapatkan akses
‫ke semua tur, karena tentu
‫saja middleware ini berjalan sebelum pengontrol getAllTours.
‫Dan sekarang, ini benar-benar dilindungi, oke?
‫Jadi itu benar-benar bekerja cukup bagus pada saat ini.
‫Tapi tentu saja, ini jauh dari
‫cukup, karena tidak cukup hanya mengirim token dengan permintaan.
‫Itu juga harus berupa token yang valid.
‫Jadi pada dasarnya token di mana tidak
‫ada yang mencoba mengubah muatannya.
‫Oke, dan payloadnya, ingat, dalam kasus
‫kami selalu user_id dari pengguna yang tokennya dikeluarkan.
‫Baiklah, dan selanjutnya
‫kita perlu menerapkan langkah verifikasi ini.
‫Tapi kuliah ini sudah berjalan cukup lama dan masih
‫banyak hal yang harus dilakukan di
‫sini, jadi mari kita tinggalkan itu untuk video berikutnya.