‫Instruktur: Jadi kami belajar di
‫kuliah terakhir bahwa token web JSON harus
‫disimpan dalam cookie khusus HTTP yang aman.
‫Namun saat ini, kami hanya mengirimkan
‫token sebagai string sederhana dalam respons JSON kami.
‫Jadi di video ini, mari kita juga mengirim token sebagai cookie,
‫sehingga browser dapat menyimpannya dengan cara yang
‫lebih aman ini.
‫Jadi kita dalam kode kita.
‫Apakah kami benar-benar mengirim token ke klien?
‫Ingat, itu ada di authController dan
‫di sini di fungsi createSendToken.
‫Jadi sebelumnya, pada dasarnya kami memiliki semua
‫kode ini di banyak tempat berbeda, tetapi kemudian kami memfaktorkan
‫ulang semua itu ke dalam fungsi createSendToken ini.
‫Baiklah, dan di sinilah kita akan bekerja sekarang.
‫Sekarang, saya yakin Anda sudah
‫familiar dengan cara kerja cookie secara umum, tetapi
‫hanya untuk memastikan kita semua berada di halaman yang sama di
‫sini, mari kita bicara sedikit tentang cookie.
‫Jadi pertama-tama, cookie pada dasarnya hanyalah sepotong
‫kecil teks yang dapat dikirim oleh server ke klien.
‫Kemudian ketika klien menerima cookie, itu akan
‫secara otomatis menyimpannya dan
‫kemudian secara otomatis mengirimkannya kembali bersama
‫dengan semua permintaan di masa mendatang ke server yang sama.
‫Baiklah, sekali lagi, browser secara otomatis menyimpan cookie
‫yang diterimanya dan mengirimkannya kembali
‫di semua permintaan di masa mendatang ke server tempat asalnya.
‫Oke, sekarang, untuk saat ini, ini
‫tidak terlalu penting bagi
‫kami karena kami hanya menguji API menggunakan Postman.
‫Namun beberapa saat kemudian, ketika kita akan membuat halaman
‫web dinamis dan benar-benar berinteraksi dengan
‫browser, maka akan menjadi
‫sangat penting bahwa browser mengirimkan kembali token pada
‫dasarnya secara otomatis di setiap permintaan.
‫Oke, dan saat itu, tentu saja, kita akan berbicara lebih banyak tentang itu.
‫Tapi bagaimanapun, sekarang mari kita belajar bagaimana sebenarnya
‫membuat dan mengirim cookie.
‫Jadi untuk mengirim cookie sebenarnya sangat mudah.
‫Yang harus kita lakukan pada dasarnya adalah
‫melampirkannya ke objek respons.
‫Jadi kita katakan res. cookie dan kemudian yang
‫harus kita lakukan adalah menentukan nama
‫cookie, dan saya menyebutnya token
‫web JSON, lalu data yang sebenarnya ingin kita kirim
‫ke dalam cookie, dan itu tentu saja akan
‫menjadi variabel token dan kemudian setelah itu, beberapa opsi untuk cookie.
‫Dan opsi pertama yang
‫akan kita tentukan adalah properti kedaluwarsa.
‫Oke, jadi pada dasarnya, properti
‫kedaluwarsa ini akan membuat browser atau klien pada
‫umumnya akan menghapus cookie setelah kedaluwarsa.
‫Oke, jadi kami mengatur tanggal
‫kedaluwarsa yang mirip dengan yang kami atur di token web JSON, oke.
‫Jadi mari kita buat variabel baru
‫untuk itu, oke, karena paket token web
‫JSON kemudian dapat bekerja dengan format ini.
‫Oke, tapi dalam JavaScript, ini agak tidak berarti dan sebagai
‫gantinya, mari kita buat variabel dengan bilangan real.
‫Jadi sebut saja masih JWT,
‫lalu
‫cookie, kedaluwarsa, dan kami masih mengaturnya menjadi 90, jadi 90 hari,
‫tetapi sekali lagi, tanpa D.
‫Oke, jadi sekarang kita bisa benar-benar
‫melakukan operasi dengannya karena kita perlu mengubahnya menjadi milidetik, oke.
‫Jadi kapan cookie ini harus kedaluwarsa?
‫Itu harus kedaluwarsa pada tanggal baru.
‫Jadi dalam JavaScript, saat menentukan tanggal,
‫kita selalu perlu mengatakan
‫Tanggal baru dan tanggal itu harus kedaluwarsa sekarang, ditambah 90 hari ini.
‫Oke, jadi sekarang, seperti ini tentu saja.
‫Dan kemudian proses. env, dan
‫sekarang, mari kita gunakan yang ini dan kemudian
‫cukup masukkan cookie di sana, oke.
‫Tapi sekarang, tentu saja, kita perlu mengubahnya menjadi milidetik.
‫Jadi kita punya 90 hari sekarang.
‫Jadi dua jam, waktunya 24.
‫Dua menit, kali 60.
‫Dua detik, kali 60 lagi.
‫Dan kemudian ke milidetik, kali seribu, oke.
‫Dan tentu saja, saya bisa melakukan
‫semuanya sekaligus, tapi ini hanya untuk menentukan apa yang sebenarnya kita lakukan.
‫Jadi untuk menunjukkan
‫bahwa kita benar-benar mengubahnya menjadi milidetik.
‫Opsi selanjutnya adalah opsi aman.
‫Jadi kita akan menyetel yang
‫ini ke true dan seperti ini, cookie hanya akan
‫dikirim pada koneksi terenkripsi.
‫Jadi pada dasarnya, kami hanya menggunakan HTTPS, oke.
‫Dan akhirnya, itu adalah opsi httpOnly yang telah kita
‫bicarakan sebelumnya.
‫Oke, jadi kita set yang ini
‫ke true dan ini akan
‫membuat cookie tidak dapat diakses atau dimodifikasi dengan cara apa pun oleh browser.
‫Oke, jadi ini penting untuk mencegah
‫serangan skrip lintas situs tersebut.
‫Baiklah, jadi semua yang akan
‫dilakukan browser saat kita menyetel httpOnly ke true
‫pada dasarnya adalah menerima
‫cookie, menyimpannya, dan kemudian mengirimkannya secara otomatis bersama setiap permintaan.
‫Oke, dan itu sebenarnya.
‫Jadi beginilah dasarnya kami mendefinisikan cookie, jadi katakanlah bagian
‫ini, dan kemudian kami
‫mengirimkannya menggunakan res. Kue kering.
‫Sekarang, jika kami ingin mengujinya sekarang, itu tidak akan berhasil
‫karena saat ini, kami sebenarnya tidak menggunakan HTTPS.
‫Dan karena ini aman: benar, cookie
‫tidak akan dibuat
‫dan tidak dikirim ke klien.
‫Baiklah, dan pada
‫dasarnya, kami hanya ingin mengaktifkan bagian ini di sini dalam produksi.
‫Jadi yang akan saya lakukan pada
‫dasarnya adalah mengekspor seluruh objek ini ke dalam variabel terpisah.
‫Oke, jadi izinkan saya menunjukkannya kepada Anda.
‫Jadi
‫const cookieOptions harus sama dengan
‫ini dan kemudian di sini, kami meneruskannya.
‫Baiklah.
‫Sekarang, tentu saja, kami kemudian tidak menginginkan bagian ini di
‫sini, tetapi hanya ketika kami sedang dalam produksi.
‫Jadi
‫katakanlah jika proses. lingkungan NODE_ENV, ingat itu tempat
‫penyimpanannya apakah kita sedang produksi
‫atau tidak.
‫Jadi jika itu
‫sama dengan produksi, atur cookieOptions. aman sama dengan
‫benar.
‫Oke, dan sekarang, kita bisa menghapusnya dari sini.
‫Ya, jadi sekarang, hanya saat kita dalam produksi,
‫kita akan mendapatkan opsi aman yang disetel ke true.
‫Dan sebaliknya, hanya akan dikirim seperti
‫ini, jadi hanya dengan tanggal kedaluwarsa dan httpOnly.
‫Oke, dan sekarang mari kita benar-benar menguji ini.
‫Dan saya akan mengujinya dengan membuat pengguna baru.
‫Jadi di sini di Daftar sebenarnya
‫dan sebut saja
‫ini pengguna@jonas. saya
‫Selalu dengan kata sandi yang sama.
‫Saya akan memanggilnya
‫Pengguna juga dan katakanlah peran di sini adalah panduan, jadi
‫kami juga memiliki beberapa peran berbeda di sini.
‫Berikan lebih banyak ruang.
‫Dan sekarang, mari kita coba sebenarnya.
‫Dan responnya seperti yang kami harapkan dengan perbedaan
‫yang sekarang, kami
‫mendapatkan satu cookie di sini di tab Cookie ini.
‫Dan memang, di
‫sini, kita mendapatkan nama cookie, nilainya.
‫Kami juga memiliki tanggal
‫kedaluwarsa, yaitu tepat 90 hari dari sekarang.
‫Kami memiliki httpOnly disetel ke true dan juga, secure disetel ke false.
‫Baiklah.
‫Hebat, kami juga dapat melihat semua cookie yang kami miliki
‫di sini di tab Cookie ini.
‫Dan sekali lagi, kami melihat satu cookie yang
‫kami terima dari domain ini, oke.
‫Sekarang, hanya satu hal terakhir yang sebenarnya ingin
‫saya ubah dalam fungsi yang baru saja
‫kita kerjakan,
‫jadi createSendToken, pada dasarnya menghilangkan kata sandi ini di sini di output.
‫Oke, jadi dalam skema kami, kami sebenarnya
‫mengaturnya untuk memilih salah, sehingga tidak muncul saat
‫kami meminta semua pengguna.
‫Tetapi dalam kasus ini, itu berasal dari pembuatan dokumen
‫baru dan itu berbeda dan itulah mengapa kami melihatnya di sini.
‫Oke, tapi sebenarnya kita bisa memperbaikinya dengan sangat mudah.
‫Oke, jadi yang perlu kita lakukan sebenarnya adalah mengatur
‫pengguna. kata
‫sandi untuk tidak terdefinisi.
‫Baiklah, dan itu
‫harus menghapus
‫kata sandi dari output.
‫Oke.
‫Jadi mari kita hapus saja pengguna ini di sini yang baru saja kita buat.
‫Dan coba lagi
‫hanya untuk melihat apakah kata sandi tidak muncul lagi.
‫Dan ya, memang sekarang, itu hilang.
‫Dan tetap saja, kue kami, tentu saja, ada di sini.
‫Dan ketika kita sekarang sampai di sini ke tab
‫Cookies, maka Anda masih memiliki hanya satu cookie
‫karena yang lama sekarang pada dasarnya ditimpa oleh yang baru
‫ini dan itu
‫karena mereka memiliki nama yang sama.
‫Jadi namanya seperti pengidentifikasi unik untuk cookie.
‫Jadi jika kita menerima satu
‫dengan nama yang
‫sudah diberikan, ya, yang lama diganti saja.
‫Oke, dan itu sebenarnya.
‫Jadi beginilah cara kami mengirim cookie khusus HTTP dan sekali lagi,
‫kami akan membicarakan lebih banyak tentang
‫ini saat kami membangun situs web dinamis kami.