‫-: Selamat datang kembali.
‫Jadi, kami telah menerapkan otentikasi
‫dalam proyek kami hingga saat ini.
‫Dan, itu bekerja dengan baik.
‫Namun, terkadang, hanya mengautentikasi, jadi,
‫memasukkan pengguna, sebenarnya
‫tidak cukup.
‫Dan, jadi di
‫video ini, kami juga akan menerapkan otorisasi.
‫Jadi, bayangkan tindakan menghapus tur dari
‫database kami.
‫Jadi, tidak setiap pengguna, tentu saja,
‫diizinkan untuk melakukan itu.
‫Bahkan jika pengguna masuk, bukan?
‫Jadi, pada dasarnya kita hanya perlu
‫mengotorisasi jenis pengguna tertentu, untuk
‫melakukan tindakan tertentu.
‫Dan itulah tepatnya otorisasi.
‫Ini memverifikasi jika pengguna tertentu memiliki hak
‫untuk berinteraksi dengan sumber daya tertentu.
‫Jadi, sekali lagi, dengan otorisasi kami pada dasarnya
‫memeriksa apakah pengguna tertentu diizinkan untuk mengakses sumber daya tertentu, bahkan
‫jika dia masuk.
‫Jadi tidak semua pengguna yang masuk akan dapat melakukan
‫tindakan yang sama di API kami, oke?
‫Dan ini adalah skenario yang sangat
‫umum yang harus diterapkan di setiap
‫aplikasi web biasanya, oke?
‫Jadi kita akan membangun fungsi middleware lain
‫di sini, kali ini untuk membatasi rute tertentu.
‫Misalnya, untuk menghapus tur.
‫Jadi, ini berarti kita akan membangun fungsi
‫middleware lain di sini.
‫Kali ini, untuk membatasi rute tertentu,
‫seperti, misalnya, menghapus
‫tur, hanya untuk peran pengguna tertentu.
‫Oke?
‫Jadi izinkan saya menunjukkan kepada Anda bagaimana hal
‫itu akan terlihat dalam praktik.
‫Jadi di sini,
‫di rute tur, mari kembali ke contoh menghapus tur,
‫jadi mari tambahkan beberapa middleware ke dalam tumpukan di sini.
‫Jadi authController, lindungi.
‫Jadi pertama-tama, kita
‫harus selalu memeriksa apakah pengguna benar-benar masuk, oke?
‫Jadi, jika administrator mencoba menghapus tur, mereka
‫masih perlu memeriksa
‫apakah dia benar-benar masuk, bukan?
‫Jadi middleware pertama di tumpukan di sini,
‫akan selalu menjadi yang melindungi.
‫Tapi kemudian, setelah itu, kita
‫juga akan memiliki authController. membatasi.
‫Jadi batasiUntuk, oke?
‫Dan ke dalam fungsi ini kami kemudian akan melewati beberapa peran pengguna,
‫yang akan diberi wewenang untuk berinteraksi dengan sumber daya ini.
‫Dalam hal ini, dengan menghapus tur, oke?
‫Jadi mari kita atur yang ini ke admin.
‫Jadi, hanya untuk administrator.
‫Oke, jadi sekarang kita berurusan dengan peran pengguna di sini.
‫Jadi seperti admin.
‫Dan saat ini, kami tidak memilikinya di model pengguna kami.
‫Jadi mari kita segera menerapkannya di sini.
‫Baiklah.
‫Jadi, mari kita lakukan itu.
‫Sebenarnya, sebelum hal password, jadi seperti di sini.
‫Dan di bawah sini Anda benar-benar dapat melihat bagaimana
‫penangan pengecualian yang tidak tertangkap
‫bekerja dengan baik, karena limitTo belum berfungsi, bukan?
‫Kami belum menerapkannya.
‫Saya hanya menggunakannya untuk menunjukkan apa sebenarnya
‫yang akan kita bangun.
‫Dan tentu saja ada
‫kesalahan, jadi
‫nodemon sekarang menunggu kita untuk me-restart server, oke?
‫Bagaimanapun, peran di sini harus dari tipe
‫String, dan sekarang saya akan menggunakan validator enum untuk hanya
‫mengizinkan jenis peran tertentu di sini untuk ditentukan.
‫Dan ini adalah umum, jadi pengguna biasa, jadi sebut
‫saja mereka pengguna.
‫Kemudian, kami memiliki pemandu
‫wisata, kami memiliki pemandu wisata
‫utama, dan kami memiliki administrator.
‫Jadi, saya hanya menelepon admin itu, oke?
‫Dan peran pengguna yang kita miliki di sini
‫tentu saja akan spesifik untuk domain aplikasi.
‫Jadi, misalnya, ketika Anda menjalankan situs komunitas,
‫tidak masuk akal
‫untuk memiliki pemandu dan pemandu utama.
‫Sebaliknya Anda mungkin akan memiliki,
‫seperti, moderator atau kontributor, atau anggota.
‫Jadi, Anda akan selalu memiliki nama
‫yang berbeda, tergantung pada jenis aplikasi yang Anda tulis.
‫Tetapi dalam kasus kami, inilah yang masuk akal.
‫Kemudian, kami juga ingin menetapkan default di sini,
‫jadi kami sebenarnya tidak harus
‫selalu menentukan tipe pengguna yang kami buat.
‫Jadi pengguna, pengguna normal, katakanlah, adalah pengguna
‫yang akan dibuat secara default.
‫Jadi sekarang mari kita lanjutkan
‫dan hapus pengguna yang sudah kita
‫miliki, karena mereka
‫tidak memiliki peran apa pun, jadi kita tidak membutuhkan mereka seperti ini lagi.
‫Baiklah.
‫Jadi, mari kita
‫lanjutkan dan buat yang baru.
‫Jadi, saya akan mendaftar di sini sebagai hello@jonas,
‫dan itu sekarang akan menjadi pengguna biasa, dan sekarang kami tidak mendapatkan tanggapan
‫apa pun, dan itu
‫tentu saja karena kami memiliki kesalahan ini di
‫sini, jadi, mari kita sangat cepat keluarkan baris kode ini.
‫Dan sekarang kesalahan itu hilang.
‫Jadi sekarang harus
‫dijalankan, dan memang kita sekarang
‫memiliki pengguna ini, dengan peran pengguna, oke?
‫Jadi itu default kita,
‫tapi sekarang mari kita buat admin di sini.
‫Dan untuk membuatnya sangat
‫jelas, mari kita taruh di sini di email
‫juga, dan sekarang kita perlu benar-benar menentukan
‫perannya, dan mengaturnya menjadi admin.
‫Kirim itu, dan sekarang kami sampai di sini administrator sistem kami.
‫Dingin.
‫Jadi, mari kembali ke sini, letakkan kembali kode ini, dan sekarang kita
‫akan membuatnya sehingga kita benar-benar
‫dapat meneruskan beberapa argumen ke dalam batasan ini.
‫Jadi, saya ingin admin dapat menghapus tur,
‫tetapi juga menghapus panduan.
‫Baiklah?
‫Jadi mari kita tambahkan itu di sini juga.
‫Oke?
‫Jadi admin dan pemandu utama sekarang dapat
‫menghapus tur, tetapi bukan pemandu biasa, dan juga bukan pengguna biasa.
‫Baiklah?
‫Jadi beginilah cara kerja limitTo, sekarang mari
‫kita lanjutkan dan implementasikan.
‫Jadi ekspor. limitTo, dan
‫sekarang, bagaimana kita sebenarnya akan mengimplementasikan ini?
‫Karena biasanya, kita tidak bisa
‫melewatkan argumen ke dalam fungsi middleware, bukan?
‫Tapi dalam hal ini, kami benar-benar ingin.
‫Kami ingin meneruskan
‫peran, siapa yang diizinkan mengakses sumber daya, bukan?
‫Jadi kasus ini, admin dan pemandu utama.
‫Jadi kita membutuhkan cara yang pada dasarnya meneruskan argumen
‫ke dalam fungsi middleware dengan cara
‫yang biasanya tidak berfungsi.
‫Jadi, bagaimana kita akan melakukannya?
‫Nah, di sini sebenarnya kita akan membuat
‫fungsi seperti pembungkus, yang kemudian akan
‫mengembalikan fungsi middleware yang sebenarnya ingin kita buat, oke?
‫Jadi, ini adalah fungsi limitTo, dan di
‫sini kita ingin
‫memberikan sejumlah argumen yang berubah-ubah.
‫Jadi, pada dasarnya, peran.
‫Jadi kita bisa menggunakan sintaks parameter
‫rest, yang lagi-lagi baru di ES6, dan
‫ini kemudian akan
‫membuat larik dari semua argumen yang ditentukan, oke?
‫Jadi kami membuat
‫fungsi ini, dan segera kami akan mengembalikan fungsi baru.
‫Dan inilah fungsi middleware itu sendiri.
‫Jadi, permintaan, tanggapan, dan selanjutnya.
‫Oke?
‫Masuk akal?
‫Jadi fungsi ini di sini
‫pada dasarnya akan mendapatkan akses ke
‫parameter peran ini di sini, karena ada penutupan, oke?
‫Jadi, seperti komentar di sini untuk
‫menjelaskan, peran adalah array.
‫Jadi, misalnya, mungkin, dalam
‫hal ini, admin, dan pemandu utama, oke?
‫Jadi kapan kami akan memberikan akses pengguna ke rute tertentu?
‫Nah, pada dasarnya, ketika peran penggunanya
‫ada di dalam array peran yang kita lewati ini kan?
‫Jadi katakanlah kita memiliki pengguna biasa
‫sekarang, yang memiliki peran sebagai pengguna sederhana, jadi mari
‫kita tulis di sini.
‫Peran sekarang hanya pengguna.
‫Jadi pada dasarnya itu tidak terkandung dalam array
‫ini, dan oleh karena itu, pengguna itu tidak memiliki izin, oke?
‫Jadi, mari kita tulis dalam kode.
‫Ini sebenarnya cukup sederhana.
‫Jadi, jika bukan peran. termasuk, dan oke, sekali lagi
‫termasuk adalah metode array yang sangat bagus yang
‫ada di Java Script tersedia di semua array, oke?
‫Jadi, jika larik peran ini tidak
‫menyertakan peran pengguna saat ini,
‫maka kami tidak memberikan izin kepada pengguna tersebut.
‫Dan di mana peran pengguna saat ini disimpan?
‫Nah, mari kita ingat baris kode yang sebenarnya
‫kita letakkan di sini, tepat di akhir
‫di mana kita memberikan akses ke rute
‫yang dilindungi, kita
‫menyimpan pengguna saat ini dalam permintaan. pengguna.
‫Dan ingat bagaimana melindungi
‫middleware ini selalu berjalan sebelum limitTo, bukan?
‫Jadi, di sini, pertama-tama kita punya protect,
‫lalu kita punya limitTo.
‫Jadi pada saat fungsi middleware ini berjalan, yang
‫ini telah selesai, dan
‫telah menempatkan pengguna saat ini pada objek permintaan.
‫Jadi sekarang, kita bisa menggunakannya di sini.
‫Jadi permintaan. pengguna. peran.
‫Jadi di situlah peran itu disimpan.
‫Sangat sederhana.
‫Dalam hal ini, kami membuat kesalahan baru.
‫Jadi seperti sebelumnya, dan sekarang
‫kami katakan Anda tidak memiliki izin untuk melakukan tindakan ini.
‫Dan sekarang kode status baru, yaitu 403.
‫Dan yang ini artinya terlarang, oke?
‫Jadi memang
‫ada kode status http khusus untuk
‫kasus ini, jadi untuk otorisasi pada dasarnya, oke?
‫Dan, yah, jika tidak, kita cukup menelepon berikutnya.
‫Dan itu benar-benar itu.
‫Jadi sesederhana itu.
‫Jadi mari kita cepat rekap apa yang baru saja kita lakukan di sini.
‫Jadi, di sini, pertama-tama kita jalankan pelindung middleware.
‫Kemudian, batasi ke middleware,
‫dan hanya jika kedua middleware ini lolos ke yang
‫berikutnya, kita pergi ke tur utama.
‫Jadi pada dasarnya
‫pengendali rute ini, atau pengontrol rute ini,
‫dilindungi, dan juga dibatasi oleh middleware
‫yang baru saja kita buat.
‫Kemudian ke
‫fungsi ini, kami melewati semua
‫peran yang diizinkan untuk berinteraksi dengan sumber daya ini.
‫Jadi, pada dasarnya, yang
‫diizinkan untuk menjalankan fungsi handler ini, oke?
‫Jadi, fungsi limitTo ini kemudian akan
‫berjalan, dan mengembalikan fungsi middleware itu sendiri, oke?
‫Dan fungsi middleware itu sendiri sebenarnya yang ini.
‫Kemudian, karena
‫penutupan, memiliki akses ke peran, oke?
‫Jadi, katakanlah peran pengguna saat ini, yaitu, ingat,
‫disimpan di req. pengguna. peran, kan?
‫Jadi, katakanlah perannya adalah pengguna, dan
‫karena peran itu tidak ada dalam larik peran
‫ini, maka kita mendapatkan kesalahan ini, oke?
‫Dan itulah yang peran ini. termasuk tes di sini untuk, oke?
‫Tapi tentu saja, jika
‫disertakan, maka kita lolos ke middleware berikutnya.
‫Yang sekali lagi, adalah pengendali rute itu sendiri.
‫Dingin.
‫Jadi, saya harap itu masuk akal.
‫Sekarang mari kita maju dan mengujinya dengan cepat.
‫Oke?
‫Jadi sekarang, kami memiliki
‫token ini di sini, disimpan ke dalam variabel JTW, bukan?
‫Jadi ingat itu dari kuliah terakhir.
‫Jadi, kita berada di
‫lingkungan dev ini, dan inilah variabel itu.
‫Jadi persis yang ada di bawah sini.
‫Baiklah?
‫Jadi jika sekarang kita ingin
‫menghapus tur, kita harus menentukan variabel itu di sana, bukan?
‫Jadi mari kita pergi ke otorisasi, token
‫pembawa, dan kemudian sebenarnya
‫sudah menempatkannya di sini untuk kita.
‫Jadi sudah tahu
‫kalau ini yang mau kita pakai, karena,
‫nah, kita pakai dulu ya?
‫Sekarang, saya ingin memulai dengan menunjukkan
‫kepada Anda bahwa pengguna biasa tidak dapat menghapus tur sekarang, oke?
‫Jadi mari kita mulai dengan masuk sebagai pengguna biasa.
‫Dan jadi itu halo, kan?
‫Ingat, sekarang kita punya hello@jonas. io, yang merupakan pengguna biasa, dan
‫kami memiliki admin@jonas. saya
‫Dan kita masih memiliki yang lama ini, mari kita singkirkan.
‫Baiklah.
‫Jadi saya akan mulai dengan hello@jonas. saya
‫Oke?
‫Jadi, login, maka token itu akan disimpan ke dalam
‫variabel lingkungan, dan sekarang kita
‫siap untuk menghapus tur.
‫Kami sebenarnya juga perlu mendapatkan ID sekarang, jadi mari
‫kita cepat mendapatkannya dari sini, jadi pada
‫dasarnya kami akan menghapus salah satu tur kami di sini.
‫Jadi mari kita gunakan yang terakhir di sini.
‫Jadi, pengamat bintang.
‫Oke?
‫Dan mari kita lihat apakah kita mendapatkan pesan kesalahan kita.
‫Dan, memang, Anda tidak memiliki izin untuk
‫melakukan tindakan ini.
‫Jadi, 403.
‫Jadi, memang, itu agak berhasil, bukan?
‫Tapi, untuk melengkapinya
‫sekarang, tentu saja kita login sebagai admin.
‫Jadi, admin.
‫Gabung.
‫Dan token ini sekarang disimpan ke dalam variabel ini.
‫Jadi jika Anda
‫menjalankan ini sekarang, kami seharusnya dapat menghapus tur secara efektif.
‫Ingin melihat?
‫Dan, itu hilang.
‫Jadi kami memiliki kode 204, tidak ada konten,
‫yang merupakan standar saat menghapus,
‫tetapi sekarang jika kami mendapatkan semua
‫tur kami, kami sekarang akan melihat angka delapan
‫di sini, jadi
‫hanya delapan hasil, dan itu berarti yang terakhir sekarang pergi, oke?
‫Dan sekarang, seperti yang baru
‫saja kami buktikan, administrator
‫memiliki izin untuk menghapus tur secara efektif, oke?
‫Dan, saya benar-benar tidak bisa
‫cukup menekankan betapa pentingnya bagian kode ini di sini.
‫Jadi pada dasarnya, dari mana kita mendapatkan peran dari
‫pengguna saat ini dari middleware sebelumnya, oke?
‫Jadi, menyimpan pengguna ke permintaan seperti yang
‫kita lakukan di sini,
‫sangat penting agar langkah selanjutnya benar-benar berfungsi, oke?
‫Jadi, ID yang dikodekan ke dalam token web Jason inilah yang
‫membuat kode kami kemudian mengetahui apakah
‫pengguna yang mencoba melakukan tindakan tersebut adalah pengguna, atau apakah
‫itu admin, atau apakah itu panduan utama, atau apa pun.
‫Sekali lagi, karena
‫data tersebut berasal dari middleware pelindung ini.
‫Besar.
‫Ini adalah bagian penting dari teka-teki
‫dalam menerapkan alur kerja otentikasi kami di sini.
‫Dan tentu saja, Anda ingin membatasi
‫banyak rute lain, misalnya, seperti memperbarui di sini, oke?
‫Tapi aku akan meninggalkan itu
‫untuk poin selanjutnya dari kursus, oke?
‫Di sini, saya hanya ingin menunjukkan
‫kepada Anda bagaimana semua ini bekerja, oke?
‫Jadi, saya pikir saya berhasil melakukannya.
‫Saya harap Anda memahami cara kerjanya, dan
‫tentu saja, jika tidak, Anda selalu dapat mengajukan
‫pertanyaan di bagian Tanya Jawab resmi.
‫Bagaimanapun, ada beberapa konten hebat lainnya yang muncul sekarang dan
‫jadi, mari kita lanjutkan.