﻿1
00:00:01,260 --> 00:00:02,480
‫Jonas: Jadi

2
00:00:02,480 --> 00:00:04,560
‫dalam kuliah ini kita akan

3
00:00:04,560 --> 00:00:08,010
‫mengimplementasikan fungsi login user berdasarkan password dan alamat

4
00:00:08,010 --> 00:00:09,363
‫email yang diberikan.

5
00:00:10,920 --> 00:00:14,520
‫Dan seperti sebelumnya, konsep memasukkan pengguna pada dasarnya

6
00:00:14,520 --> 00:00:17,400
‫berarti menandatangani token web JSON dan

7
00:00:17,400 --> 00:00:19,760
‫mengirimkannya kembali ke klien.

8
00:00:19,760 --> 00:00:22,390
‫Tetapi dalam kasus ini kami hanya

9
00:00:22,390 --> 00:00:24,860
‫mengeluarkan token jika pengguna benar-benar ada,

10
00:00:24,860 --> 00:00:27,310
‫dan kata sandinya benar.

11
00:00:27,310 --> 00:00:29,773
‫Jadi, mari kita mulai menerapkannya.

12
00:00:31,480 --> 00:00:36,260
‫Ekspor. masuk adalah...

13
00:00:39,090 --> 00:00:42,253
‫permintaan, tanggapan, dan selanjutnya.

14
00:00:44,370 --> 00:00:47,060
‫Dan hal pertama adalah kita benar-benar

15
00:00:47,060 --> 00:00:50,020
‫membaca email dan kata sandi dari badan.

16
00:00:50,020 --> 00:00:54,740
‫Jadi katakanlah const email sama dengan req. tubuh. surel.

17
00:00:58,920 --> 00:01:02,070
‫Oke, dan sekarang eslint memberi kita peringatan ini, atau

18
00:01:02,070 --> 00:01:04,160
‫kesalahan ini sebenarnya, dan dikatakan

19
00:01:04,160 --> 00:01:07,080
‫bahwa kita harus menggunakan perusakan objek, oke?

20
00:01:07,080 --> 00:01:09,620
‫Jadi saya membiarkan ini terjadi di sini

21
00:01:09,620 --> 00:01:12,620
‫dengan sengaja agar saya dapat menunjukkan kepada Anda bagaimana

22
00:01:12,620 --> 00:01:14,950
‫kita dapat melakukannya dengan perusakan ES6.

23
00:01:14,950 --> 00:01:18,490
‫Dan saya rasa saya sudah membicarakan ini sebelumnya

24
00:01:18,490 --> 00:01:20,930
‫di kursus, dan saya juga berharap

25
00:01:20,930 --> 00:01:23,330
‫Anda sudah familiar dengan konsepnya,

26
00:01:23,330 --> 00:01:25,430
‫tapi bagaimanapun, karena nama

27
00:01:25,430 --> 00:01:27,920
‫properti ini di sini sama dengan

28
00:01:27,920 --> 00:01:30,260
‫nama variabel, kita bisa melakukannya

29
00:01:30,260 --> 00:01:34,150
‫seperti ini dan singkirkan nama properti di sini, oke?

30
00:01:34,150 --> 00:01:36,520
‫Dan juga kami ingin mendapatkan kata sandinya.

31
00:01:36,520 --> 00:01:37,930
‫Dan itu akan sama, jadi

32
00:01:37,930 --> 00:01:42,470
‫pada dasarnya kata sandi sama dengan permintaan. tubuh. kata sandi.

33
00:01:42,470 --> 00:01:43,647
‫Dan alih-alih

34
00:01:43,647 --> 00:01:47,940
‫melakukan itu, kita cukup melakukan email dan kata sandi.

35
00:01:47,940 --> 00:01:50,250
‫Jadi seperti ini, pada

36
00:01:50,250 --> 00:01:54,480
‫dasarnya kita membuat dua variabel objek body ini, oke?

37
00:01:54,480 --> 00:01:56,380
‫Jadi pada dasarnya ini

38
00:01:56,380 --> 00:02:00,223
‫adalah bagaimana pengguna akan mengirimkan kredensial login untuk kami periksa.

39
00:02:01,070 --> 00:02:04,130
‫Oke, dan proses pemeriksaan itu memiliki beberapa langkah, jadi

40
00:02:04,130 --> 00:02:05,830
‫mari kita letakkan di

41
00:02:05,830 --> 00:02:07,750
‫sini sebelum kita mulai membuat kode.

42
00:02:07,750 --> 00:02:12,030
‫Jadi pertama-tama kita perlu memeriksa

43
00:02:12,030 --> 00:02:17,030
‫apakah email dan kata sandi benar-benar ada, oke?

44
00:02:17,900 --> 00:02:22,900
‫Kemudian nomor dua, periksa apakah pengguna ada, dan

45
00:02:24,440 --> 00:02:29,440
‫pada saat yang sama apakah kata sandinya benar.

46
00:02:31,960 --> 00:02:33,943
‫Dan ketiga, jika semuanya

47
00:02:39,440 --> 00:02:44,440
‫baik-baik saja, kirim token, jadi token web JSON kembali ke klien.

48
00:02:45,800 --> 00:02:48,490
‫Oke, jadi yang pertama sangat mudah.

49
00:02:48,490 --> 00:02:53,490
‫Jadi jika tidak ada email atau tidak ada kata sandi, maka kami

50
00:02:56,810 --> 00:03:00,370
‫ingin mengirim pesan kesalahan ke klien kami.

51
00:03:00,370 --> 00:03:02,600
‫Sekarang bagaimana kita akan melakukannya?

52
00:03:02,600 --> 00:03:04,490
‫Kami akan melakukannya menggunakan

53
00:03:04,490 --> 00:03:07,490
‫alat yang kami implementasikan tepat di bagian terakhir.

54
00:03:07,490 --> 00:03:10,730
‫Jadi pada dasarnya kesalahan aplikasi kami, ingat itu?

55
00:03:10,730 --> 00:03:12,977
‫Jadi kami hanya akan membuat kesalahan baru

56
00:03:12,977 --> 00:03:15,060
‫di sini, dan middleware penanganan

57
00:03:15,060 --> 00:03:19,190
‫kesalahan global kami kemudian akan mengambilnya dan mengirimkan kesalahan itu kembali ke klien.

58
00:03:19,190 --> 00:03:22,483
‫Jadi mari kita mulai dengan mengimpor kesalahan itu.

59
00:03:23,350 --> 00:03:25,260
‫Jadi ingat yang

60
00:03:25,260 --> 00:03:28,463
‫ini dari kelas AppError kita, kan?

61
00:03:29,620 --> 00:03:34,620
‫Jadi katakanlah AppError, dan kemudian membutuhkan.

62
00:03:40,860 --> 00:03:44,150
‫Jadi naik satu level dari sini, lalu di utilitas, dan

63
00:03:44,150 --> 00:03:45,050
‫kemudian appError.

64
00:03:48,990 --> 00:03:52,430
‫Oke, jadi kita perlu memanggil middleware berikutnya,

65
00:03:52,430 --> 00:03:56,403
‫dan kemudian di sinilah kita melewati kesalahan, ingat itu?

66
00:03:57,260 --> 00:04:00,363
‫Jadi AppError baru, dan

67
00:04:02,510 --> 00:04:07,510
‫pesannya adalah: harap berikan email dan kata sandi.

68
00:04:07,530 --> 00:04:12,530
‫Dan kode kesalahan HTTP adalah 400 untuk permintaan buruk, oke?

69
00:04:12,720 --> 00:04:14,340
‫Dan sekarang saya memiliki

70
00:04:14,340 --> 00:04:19,090
‫beberapa kesalahan di sini, dan sekali lagi eslint membantu saya memperbaiki beberapa bug.

71
00:04:19,090 --> 00:04:20,710
‫Jadi saya melihatnya

72
00:04:20,710 --> 00:04:24,010
‫di sini, sekali lagi, saya menggunakannya dengan T

73
00:04:24,010 --> 00:04:27,740
‫bukan D, dan jika saya menyimpannya sekarang, semuanya benar.

74
00:04:27,740 --> 00:04:32,393
‫Oke, jadi mari kita mulai menguji ini segera.

75
00:04:33,330 --> 00:04:34,700
‫Dan untuk itu

76
00:04:34,700 --> 00:04:39,700
‫saya akan mulai dengan membuat token palsu di sini untuk saat ini, oke.

77
00:04:39,930 --> 00:04:43,287
‫Dan kemudian katakanlah res. status 200 untuk oke.

78
00:04:51,202 --> 00:04:53,573
‫JSON, dan tentu saja, seperti

79
00:04:56,540 --> 00:05:01,010
‫biasa, status ditetapkan ke sukses, dan kemudian juga token kami.

80
00:05:01,010 --> 00:05:02,870
‫Dan hanya itu yang akan

81
00:05:02,870 --> 00:05:05,130
‫kami kirimkan sebagai tanggapan atas login, oke?

82
00:05:05,130 --> 00:05:08,290
‫Jadi tidak ada objek pengguna karena itu tidak perlu sama sekali.

83
00:05:08,290 --> 00:05:10,800
‫Yang kami inginkan sebagai respons untuk masuk

84
00:05:10,800 --> 00:05:12,140
‫sebenarnya adalah token.

85
00:05:12,140 --> 00:05:15,033
‫Itu saja yang penting saat pengguna masuk.

86
00:05:16,210 --> 00:05:18,960
‫Selanjutnya, kita perlu mengimplementasikan rute,

87
00:05:18,960 --> 00:05:23,600
‫jadi mari kita lakukan itu lagi di router pengguna kita, oke?

88
00:05:23,600 --> 00:05:27,000
‫Dan yang ini sebenarnya sangat mirip dengan yang ini.

89
00:05:27,000 --> 00:05:30,310
‫Mari kita duplikat saja dan kemudian

90
00:05:30,310 --> 00:05:34,780
‫ganti pendaftaran di kedua contoh di sini dengan login, oke?

91
00:05:34,780 --> 00:05:38,220
‫Dan sekali lagi, ini hanya berlaku untuk permintaan

92
00:05:38,220 --> 00:05:40,360
‫posting, karena tentu saja

93
00:05:40,360 --> 00:05:43,200
‫kami ingin mengirimkan kredensial login di badan.

94
00:05:43,200 --> 00:05:44,630
‫Dan sekali lagi ini

95
00:05:44,630 --> 00:05:47,610
‫adalah posting, tapi bukan get, bukan patch, dan bukan delete,

96
00:05:47,610 --> 00:05:50,393
‫karena itu tidak masuk akal dalam kasus ini.

97
00:05:51,590 --> 00:05:54,033
‫Jadi mari kita mengujinya segera.

98
00:05:54,970 --> 00:05:57,033
‫Saya akan menyalin URL ini di sini juga.

99
00:05:58,050 --> 00:06:03,050
‫Ini akan menjadi posting, login, dan kemudian tubuh

100
00:06:03,570 --> 00:06:05,140
‫tentu saja.

101
00:06:05,140 --> 00:06:08,700
‫Jadi sekali lagi, mentah dan JSON.

102
00:06:08,700 --> 00:06:11,443
‫Jadi mari kita buat tubuh sederhana di sini.

103
00:06:17,680 --> 00:06:19,960
‫Baiklah, jadi mari kita coba mengirim ini

104
00:06:19,960 --> 00:06:22,993
‫tanpa kata sandi apa pun, dan lihat apa yang terjadi.

105
00:06:24,460 --> 00:06:27,470
‫Dan memang berhasil, jadi kami mendapatkan pesan kami di

106
00:06:27,470 --> 00:06:30,030
‫sini: berikan email dan kata sandi.

107
00:06:30,030 --> 00:06:31,820
‫Dan lagi, karena kami

108
00:06:31,820 --> 00:06:34,110
‫dalam pengembangan, kami mendapatkan semua tumpukan kesalahan

109
00:06:34,110 --> 00:06:36,910
‫ini di sini, dan kesalahan lengkap dengan kode

110
00:06:36,910 --> 00:06:39,350
‫status kami, status, dan juga tentu saja

111
00:06:39,350 --> 00:06:41,330
‫mengatakan bahwa itu adalah kesalahan operasional.

112
00:06:41,330 --> 00:06:45,840
‫Jadi seperti yang kita definisikan di bagian sebelumnya, oke?

113
00:06:45,840 --> 00:06:48,433
‫Sekarang mari kita coba hal yang sama dengan kata sandi.

114
00:06:50,750 --> 00:06:55,750
‫Jadi kata sandi, setel ke Saya pikir ini dia,

115
00:06:56,400 --> 00:06:58,893
‫dan kemudian singkirkan emailnya.

116
00:07:00,590 --> 00:07:02,950
‫Dan itu tentu saja memicu hal yang sama.

117
00:07:02,950 --> 00:07:06,000
‫Oke, dan dengan semua yang benar yang seharusnya berfungsi, dan

118
00:07:06,000 --> 00:07:08,803
‫memang kami mendapatkan token palsu kami di sini.

119
00:07:10,300 --> 00:07:12,890
‫Sekarang hanya satu hal yang harus kita lakukan

120
00:07:12,890 --> 00:07:14,880
‫di sini adalah juga kembali.

121
00:07:14,880 --> 00:07:16,790
‫Jadi kami melakukannya berkali-kali sebelumnya, dan

122
00:07:16,790 --> 00:07:18,680
‫izinkan saya menjelaskannya lagi.

123
00:07:18,680 --> 00:07:21,610
‫Itu hanya karena setelah memanggil middleware

124
00:07:21,610 --> 00:07:24,380
‫berikutnya, kami ingin memastikan

125
00:07:24,380 --> 00:07:27,873
‫bahwa fungsi login ini selesai segera, oke?

126
00:07:30,260 --> 00:07:32,080
‫Dan karena kami tidak memilikinya

127
00:07:32,080 --> 00:07:34,560
‫sebelumnya, Anda sekarang melihat kesalahan ini lagi di sini.

128
00:07:34,560 --> 00:07:38,060
‫Jadi ini sudah agak akrab pada saat ini, kan?

129
00:07:38,060 --> 00:07:40,940
‫Jadi tidak dapat mengatur header setelah dikirim ke klien,

130
00:07:40,940 --> 00:07:43,360
‫karena sekali lagi, kami mengirim dua tanggapan.

131
00:07:43,360 --> 00:07:47,840
‫Pertama respons kesalahan, dan kemudian juga kode ini dijalankan di sini, yang

132
00:07:47,840 --> 00:07:50,040
‫tentu saja tidak boleh dilakukan.

133
00:07:50,040 --> 00:07:52,933
‫Dan sekali lagi kami menggunakan return here untuk memperbaikinya.

134
00:07:53,790 --> 00:07:57,430
‫Oke, selanjutnya, mari kita periksa apakah sebenarnya ada

135
00:07:57,430 --> 00:07:59,870
‫pengguna untuk email yang diposting.

136
00:07:59,870 --> 00:08:04,870
‫Jadi const user, dan sekarang mari kita gunakan findOne sebenarnya,

137
00:08:09,940 --> 00:08:13,400
‫karena kali ini kita tidak memilih pengguna

138
00:08:13,400 --> 00:08:16,650
‫berdasarkan ID, melainkan emailnya, kan?

139
00:08:16,650 --> 00:08:19,460
‫Jadi kita perlu memasukkan objek

140
00:08:19,460 --> 00:08:24,190
‫filter di mana kita bisa mengatakan email sama dengan email, oke?

141
00:08:24,190 --> 00:08:25,940
‫Jadi bidang itu disebut

142
00:08:25,940 --> 00:08:28,270
‫email, dan variabelnya juga disebut email.

143
00:08:28,270 --> 00:08:32,163
‫Jadi di ES6 kita bisa menyingkatnya menjadi begini.

144
00:08:33,060 --> 00:08:34,490
‫Sekarang sebelum kita melanjutkan

145
00:08:34,490 --> 00:08:36,110
‫ke sini, sebenarnya ada sesuatu

146
00:08:36,110 --> 00:08:38,520
‫yang penting yang harus saya lakukan untuk keamanan.

147
00:08:38,520 --> 00:08:41,220
‫Jadi izinkan saya menunjukkannya kepada Anda

148
00:08:41,220 --> 00:08:43,970
‫di Postman, tempat kami mendaftar untuk akun baru.

149
00:08:43,970 --> 00:08:46,540
‫Jadi Anda lihat di sini bahwa

150
00:08:46,540 --> 00:08:49,810
‫di keluaran pengguna, kami benar-benar mendapatkan kata sandinya, oke?

151
00:08:49,810 --> 00:08:52,010
‫Ini sebenarnya dienkripsi, tapi

152
00:08:52,010 --> 00:08:55,010
‫tetap saja, itu bukan praktik yang baik untuk

153
00:08:55,010 --> 00:08:57,710
‫membocorkan data kata sandi ke klien, oke?

154
00:08:57,710 --> 00:09:01,090
‫Misalnya, jika kita mendapatkan semua pengguna di sini, dan

155
00:09:01,090 --> 00:09:03,480
‫rute ini belum diterapkan, tetapi jika

156
00:09:03,480 --> 00:09:07,170
‫kita ingin mendapatkan semua pengguna dari koleksi, maka semuanya

157
00:09:07,170 --> 00:09:09,440
‫akan memiliki kata sandi

158
00:09:09,440 --> 00:09:12,720
‫yang terlihat, dan kita tidak menginginkannya , baik?

159
00:09:12,720 --> 00:09:15,790
‫Dan memperbaikinya sebenarnya cukup mudah, karena

160
00:09:15,790 --> 00:09:17,850
‫kami pernah melakukannya sebelumnya.

161
00:09:17,850 --> 00:09:19,973
‫Yang harus kita lakukan

162
00:09:20,820 --> 00:09:25,270
‫adalah mengucapkan kata sandi, lalu memilih dan menyetelnya ke salah.

163
00:09:25,270 --> 00:09:28,100
‫Dan seperti ini secara otomatis tidak akan pernah muncul di

164
00:09:28,100 --> 00:09:29,123
‫output apa pun.

165
00:09:30,520 --> 00:09:32,520
‫Dan biarkan saya benar-benar

166
00:09:32,520 --> 00:09:37,023
‫membuktikannya kepada Anda dengan mendaftar sebagai sesuatu yang lain, jadi seperti ini.

167
00:09:39,070 --> 00:09:41,920
‫Dan mari kita lihat, oh, sebenarnya kita

168
00:09:41,920 --> 00:09:45,833
‫sudah memiliki pengguna dengan email itu, jadi mari kita lakukan test3.

169
00:09:47,300 --> 00:09:50,830
‫Dan sekarang kata sandinya sebenarnya masih ada di sini,

170
00:09:50,830 --> 00:09:54,100
‫tapi saya rasa itu hanya karena kita bisa membuatnya,

171
00:09:54,100 --> 00:09:55,610
‫dokumen baru ini

172
00:09:55,610 --> 00:09:58,030
‫di sini, dan karena itu tidak

173
00:09:58,030 --> 00:10:01,460
‫benar-benar memilihnya karena kita tidak benar-benar membacanya dari database.

174
00:10:01,460 --> 00:10:03,250
‫Jadi mari kita menerapkan

175
00:10:03,250 --> 00:10:05,100
‫rute ini dengan sangat cepat di

176
00:10:05,100 --> 00:10:07,690
‫sini, itu hanya akan memakan waktu satu menit.

177
00:10:07,690 --> 00:10:10,300
‫Jadi hanya untuk melihat apakah ini di sini benar-benar berfungsi.

178
00:10:10,300 --> 00:10:12,230
‫Karena langkah ini sebenarnya penting

179
00:10:12,230 --> 00:10:15,170
‫untuk apa yang akan kita lakukan selanjutnya, oke?

180
00:10:15,170 --> 00:10:18,820
‫Jadi mari kita lanjutkan dan salin kode ini dari getAllTours,

181
00:10:18,820 --> 00:10:22,000
‫dan tidak benar-benar menyalin, tetapi apa yang akan kita

182
00:10:22,000 --> 00:10:25,133
‫lakukan tentu saja sangat mirip dengan ini.

183
00:10:26,750 --> 00:10:28,590
‫Jadi saya hanya akan

184
00:10:28,590 --> 00:10:30,450
‫menyalin ini, tetapi tanpa fitur API.

185
00:10:30,450 --> 00:10:33,700
‫Jadi aku tidak terlalu tertarik dengan itu, oke?

186
00:10:33,700 --> 00:10:35,500
‫Jadi yang ini sebenarnya

187
00:10:35,500 --> 00:10:39,170
‫akan saya lakukan di pengontrol pengguna, karena mendapatkan semua pengguna

188
00:10:39,170 --> 00:10:41,350
‫tidak ada hubungannya dengan otentikasi.

189
00:10:41,350 --> 00:10:43,570
‫Dan dalam hal ini pengontrol

190
00:10:43,570 --> 00:10:47,020
‫pengguna adalah tempat yang tepat untuk melakukan ini.

191
00:10:47,020 --> 00:10:49,440
‫Sekarang tentu saja saya juga

192
00:10:49,440 --> 00:10:51,990
‫perlu mengimpor model pengguna dengan cepat di

193
00:10:51,990 --> 00:10:56,580
‫sini, jadi mari kita juga menyalinnya dari tourController, yang tidak sama tetapi serupa.

194
00:10:56,580 --> 00:11:00,550
‫Jadi mari kita ambil semua ini ke dalam

195
00:11:04,200 --> 00:11:06,370
‫pengontrol pengguna kita.

196
00:11:06,370 --> 00:11:09,683
‫Yang ini tidak kita butuhkan, tetapi kita juga perlu catchAsync.

197
00:11:10,520 --> 00:11:13,640
‫Oke, jadi tur akan

198
00:11:13,640 --> 00:11:18,400
‫menjadi pengguna, dan ini akan menjadi userModel, oke?

199
00:11:18,400 --> 00:11:21,420
‫Kemudian di sini kami memiliki tur, dan di sini dan di

200
00:11:21,420 --> 00:11:23,790
‫bawah sini, jadi saya menekan Command + D

201
00:11:23,790 --> 00:11:26,033
‫untuk memilih semuanya dan mengubahnya menjadi pengguna.

202
00:11:27,190 --> 00:11:32,190
‫Dan disini tentunya yang kita tunggu adalah User. Temukan.

203
00:11:34,870 --> 00:11:36,320
‫Sekarang karena kita

204
00:11:36,320 --> 00:11:41,310
‫memiliki penantian di sini, kita perlu async, maka kita juga perlu berikutnya, dan

205
00:11:41,310 --> 00:11:42,810
‫karena kita memiliki async

206
00:11:42,810 --> 00:11:46,580
‫di sini, kita kemudian harus membungkus semuanya menjadi catch async.

207
00:11:46,580 --> 00:11:47,713
‫Jadi mari kita lakukan itu.

208
00:11:50,090 --> 00:11:51,700
‫Oke, dan pada

209
00:11:51,700 --> 00:11:53,810
‫titik ini, ini bukan hal baru

210
00:11:53,810 --> 00:11:58,120
‫lagi bagi Anda, kita sudah terbiasa melakukan hal semacam ini, bukan?

211
00:11:58,120 --> 00:12:00,670
‫Jadi, ini seharusnya sudah berfungsi pada saat ini,

212
00:12:00,670 --> 00:12:02,470
‫jadi mari kita coba.

213
00:12:02,470 --> 00:12:06,460
‫Jadi dapatkan semua pengguna, dan sekarang memang kami melihat

214
00:12:06,460 --> 00:12:10,030
‫bahwa kata sandi mereka tidak termasuk dalam output.

215
00:12:10,030 --> 00:12:13,853
‫Dan itu penting karena sebenarnya, di find, jadi kembali ke

216
00:12:15,090 --> 00:12:17,093
‫sini di AuthController, ini di

217
00:12:18,030 --> 00:12:21,490
‫sini sekarang juga tidak akan berisi kata sandi, oke?

218
00:12:21,490 --> 00:12:23,060
‫Dan output dari ini

219
00:12:23,060 --> 00:12:25,920
‫di sini sekarang juga tidak akan berisi kata sandi.

220
00:12:25,920 --> 00:12:28,890
‫Tapi kita perlu password untuk memeriksa apakah

221
00:12:28,890 --> 00:12:30,810
‫itu benar, kan?

222
00:12:30,810 --> 00:12:34,500
‫Jadi kita juga perlu memilihnya secara eksplisit.

223
00:12:34,500 --> 00:12:37,460
‫Jadi ingat bagaimana kita menggunakan pilih sebelumnya

224
00:12:37,460 --> 00:12:40,150
‫untuk pada dasarnya hanya memilih

225
00:12:40,150 --> 00:12:43,450
‫beberapa bidang dari database, hanya yang kita butuhkan?

226
00:12:43,450 --> 00:12:45,460
‫Sekarang dalam hal ini, ketika

227
00:12:45,460 --> 00:12:47,640
‫kita ingin field yang secara default

228
00:12:47,640 --> 00:12:50,853
‫tidak dipilih, kita perlu user plus dan kemudian nama field.

229
00:12:51,720 --> 00:12:53,610
‫Jadi kata sandi dalam hal ini.

230
00:12:53,610 --> 00:12:58,220
‫Dan seperti ini, itu akan kembali ke output, oke?

231
00:12:58,220 --> 00:13:01,750
‫Tentu saja kita perlu menunggu

232
00:13:01,750 --> 00:13:06,260
‫kueri ini, lalu menandai fungsinya sebagai async.

233
00:13:06,260 --> 00:13:08,140
‫Dan seperti sebelumnya,

234
00:13:08,140 --> 00:13:12,010
‫untuk menghindari blok try catch yang jelek

235
00:13:12,010 --> 00:13:16,253
‫itu, bungkus seluruh fungsi ini ke dalam catchAsync.

236
00:13:18,520 --> 00:13:20,163
‫Baiklah, masuk akal?

237
00:13:22,170 --> 00:13:26,770
‫Jadi sekarang mari kita dengan cepat memasukkan pengguna ke konsol, hanya untuk

238
00:13:26,770 --> 00:13:28,353
‫melihat apakah itu berfungsi.

239
00:13:32,220 --> 00:13:34,033
‫Jadi yang ini di sini.

240
00:13:35,460 --> 00:13:39,600
‫Kami mendapatkan kesuksesan kami, dan memang kami mendapatkan pengguna di sini.

241
00:13:39,600 --> 00:13:42,650
‫Jadi dengan email yang baru saja saya

242
00:13:42,650 --> 00:13:45,830
‫posting, dan kata sandinya sekarang juga kembali dimasukkan

243
00:13:45,830 --> 00:13:47,890
‫ke dalam output, oke?

244
00:13:47,890 --> 00:13:51,453
‫Dan sekali lagi, itu karena kami secara eksplisit memilihnya di sini.

245
00:13:52,490 --> 00:13:54,950
‫Jadi sekarang saatnya untuk benar-benar membandingkan kata sandi

246
00:13:54,950 --> 00:13:57,400
‫yang kita miliki di database dengan kata sandi

247
00:13:57,400 --> 00:13:59,830
‫yang baru saja diposting oleh pengguna.

248
00:13:59,830 --> 00:14:01,930
‫Tapi bagaimana kita akan melakukannya?

249
00:14:01,930 --> 00:14:05,190
‫Karena misalnya, kata sandi mungkin,

250
00:14:05,190 --> 00:14:09,169
‫atau dalam contoh ini, pass1234, tetapi kata

251
00:14:09,169 --> 00:14:13,983
‫sandi yang kami simpan di dokumen terlihat seperti ini.

252
00:14:15,040 --> 00:14:17,220
‫Jadi bagaimana kita akan membandingkan ini?

253
00:14:17,220 --> 00:14:19,960
‫Sebenarnya tidak ada cara untuk melakukannya, kan?

254
00:14:19,960 --> 00:14:22,300
‫Tapi sebenarnya ada, yang harus

255
00:14:22,300 --> 00:14:25,890
‫kita lakukan adalah menggunakan paket bcrypt lagi, oke?

256
00:14:25,890 --> 00:14:29,400
‫Jadi kami menggunakan bcrypt untuk menghasilkan kata sandi hash ini, dan kami

257
00:14:29,400 --> 00:14:31,230
‫juga dapat menggunakan paket yang sama

258
00:14:31,230 --> 00:14:34,930
‫untuk pada dasarnya membandingkan kata sandi asli seperti ini di sini dengan

259
00:14:34,930 --> 00:14:36,283
‫kata sandi hash.

260
00:14:37,230 --> 00:14:40,700
‫Tentu saja kata sandi ini di sini, karena dienkripsi, tidak

261
00:14:40,700 --> 00:14:43,350
‫ada cara untuk mendapatkan kembali yang

262
00:14:43,350 --> 00:14:46,680
‫lama, jadi kata sandi asli dari string ini, kan?

263
00:14:46,680 --> 00:14:48,150
‫Jadi itulah inti

264
00:14:48,150 --> 00:14:50,550
‫sebenarnya dari mengenkripsi kata sandi.

265
00:14:50,550 --> 00:14:52,410
‫Jadi satu-satunya cara

266
00:14:52,410 --> 00:14:54,890
‫untuk melakukannya adalah paket ini

267
00:14:54,890 --> 00:14:58,100
‫agar algoritme ini benar-benar mengenkripsi kata sandi

268
00:14:58,100 --> 00:15:02,210
‫ini juga, dan kemudian membandingkannya dengan yang terenkripsi, oke?

269
00:15:02,210 --> 00:15:05,110
‫Jadi mari kita implementasikan fungsi yang akan melakukan

270
00:15:05,110 --> 00:15:08,350
‫itu, dan untuk itu kita akan menggunakan, sekali lagi, paket bcrypt.

271
00:15:08,350 --> 00:15:11,280
‫Dan kita akan melakukannya dalam model pengguna.

272
00:15:11,280 --> 00:15:13,767
‫Dan Anda mungkin bertanya "Mengapa kami melakukannya

273
00:15:13,767 --> 00:15:16,310
‫dalam model "dan bukan hanya di sini," tapi

274
00:15:16,310 --> 00:15:19,730
‫itu, sekali lagi, karena ini benar-benar terkait dengan data itu sendiri.

275
00:15:19,730 --> 00:15:22,930
‫Dan juga kami sudah memiliki paket itu di sana,

276
00:15:22,930 --> 00:15:26,090
‫jadi lebih mudah untuk melakukannya di sana.

277
00:15:26,090 --> 00:15:28,663
‫Jadi mari kita singkirkan string ini, lalu

278
00:15:30,600 --> 00:15:32,360
‫buat fungsi di sini,

279
00:15:32,360 --> 00:15:34,580
‫yang akan memeriksa apakah kata sandi

280
00:15:34,580 --> 00:15:37,473
‫yang diberikan sama dengan yang disimpan dalam dokumen.

281
00:15:38,520 --> 00:15:41,100
‫Jadi untuk pertama kalinya sekarang kita akan membuat

282
00:15:41,100 --> 00:15:43,000
‫sesuatu yang disebut metode instance.

283
00:15:43,000 --> 00:15:46,120
‫Jadi metode instan pada dasarnya adalah metode

284
00:15:46,120 --> 00:15:48,500
‫yang akan tersedia di semua

285
00:15:48,500 --> 00:15:50,843
‫dokumen koleksi tertentu, oke?

286
00:15:51,680 --> 00:15:53,320
‫Dan itu bekerja seperti ini.

287
00:15:53,320 --> 00:15:56,120
‫Jadi sekali lagi, itu didefinisikan

288
00:15:56,120 --> 00:16:01,050
‫pada userSchema, dan kemudian kami mengatakan metode, dan sekarang dalam

289
00:16:01,050 --> 00:16:05,273
‫kasus ini kami ingin memanggil fungsi correctPassword, oke?

290
00:16:10,340 --> 00:16:12,810
‫Jadi fungsinya, sekarang fungsi ini akan menerima

291
00:16:12,810 --> 00:16:14,470
‫calonPassword, jadi kata sandi

292
00:16:17,734 --> 00:16:19,650
‫yang dimasukkan pengguna di dalam

293
00:16:19,650 --> 00:16:22,347
‫tubuh, dan kemudian juga kata sandi pengguna, oke?

294
00:16:26,010 --> 00:16:28,590
‫Sekarang di dalam metode instance

295
00:16:28,590 --> 00:16:31,470
‫ini, karena tersedia di dokumen, kata

296
00:16:31,470 --> 00:16:35,430
‫kunci this sebenarnya menunjuk ke dokumen saat ini.

297
00:16:35,430 --> 00:16:37,610
‫Tetapi dalam kasus ini, karena kita

298
00:16:37,610 --> 00:16:42,080
‫memiliki kata sandi yang disetel untuk memilih salah, jadi ini di sini, ingat?

299
00:16:42,080 --> 00:16:43,690
‫Oke, dan

300
00:16:43,690 --> 00:16:47,920
‫karena itu, ini. kata sandi tidak akan tersedia.

301
00:16:47,920 --> 00:16:50,780
‫Jadi idealnya kita akan melakukannya seperti ini,

302
00:16:50,780 --> 00:16:52,360
‫jadi dengan cara

303
00:16:52,360 --> 00:16:56,130
‫ini kita hanya perlu memasukkan kandidatPassword dan bukan userPassword.

304
00:16:56,130 --> 00:16:58,690
‫Tetapi sekali lagi, saat ini itu

305
00:16:58,690 --> 00:17:02,350
‫tidak mungkin karena kata sandi tidak tersedia di output.

306
00:17:02,350 --> 00:17:03,420
‫Dan itulah

307
00:17:03,420 --> 00:17:06,380
‫mengapa kita sebenarnya harus memasukkan userPassword juga.

308
00:17:06,380 --> 00:17:07,890
‫Jadi tujuan dari fungsi

309
00:17:07,890 --> 00:17:11,030
‫ini adalah untuk benar-benar hanya mengembalikan true atau false.

310
00:17:11,030 --> 00:17:14,000
‫Jadi pada dasarnya benar jika kata sandinya sama,

311
00:17:14,000 --> 00:17:15,663
‫dan salah jika tidak.

312
00:17:16,560 --> 00:17:21,410
‫Jadi kembali, dan kemudian bcrypt yang sudah kita ketahui,

313
00:17:21,410 --> 00:17:26,257
‫dan kemudian kita akan menggunakan fungsi perbandingan, oke?

314
00:17:26,257 --> 00:17:29,190
‫Dan fungsi perbandingannya sangat

315
00:17:29,190 --> 00:17:32,200
‫mudah, yang kita butuhkan hanyalah

316
00:17:32,200 --> 00:17:37,060
‫memasukkan candidatePassword dan userPassword, bukan userSchema, userPassword, oke?

317
00:17:39,270 --> 00:17:42,090
‫Dan seperti fungsi hash di

318
00:17:42,090 --> 00:17:45,383
‫sini, yang ini juga merupakan fungsi asinkron.

319
00:17:46,270 --> 00:17:50,973
‫Dan seperti sebelum kita menggunakan menunggu, dan kemudian di sini async.

320
00:17:53,330 --> 00:17:54,940
‫Oke, masuk akal?

321
00:17:54,940 --> 00:17:57,630
‫Jadi sekali lagi, fungsi perbandingan ini di

322
00:17:57,630 --> 00:17:59,800
‫sini akan mengembalikan nilai

323
00:17:59,800 --> 00:18:04,470
‫true jika kedua kata sandi ini sama, dan false jika tidak.

324
00:18:04,470 --> 00:18:07,030
‫Dan sekali lagi, kami tidak

325
00:18:07,030 --> 00:18:10,020
‫dapat membandingkannya secara manual karena kandidat kata

326
00:18:10,020 --> 00:18:12,800
‫sandi tidak di-hash, jadi itu adalah kata

327
00:18:12,800 --> 00:18:15,580
‫sandi asli yang berasal dari pengguna, tetapi

328
00:18:15,580 --> 00:18:18,230
‫userPassword tentu saja di-hash, dan tanpa

329
00:18:18,230 --> 00:18:21,830
‫fungsi ini di sini kami tidak dapat membandingkannya, oke?

330
00:18:21,830 --> 00:18:23,990
‫Jadi di sini kita mengembalikan true

331
00:18:23,990 --> 00:18:26,893
‫atau false, sekarang yang perlu kita lakukan hanyalah memanggil

332
00:18:26,893 --> 00:18:28,633
‫fungsi ini di authController.

333
00:18:29,920 --> 00:18:31,873
‫Mari kita tutup beberapa ini.

334
00:18:34,080 --> 00:18:38,253
‫Baiklah, jadi ini di sini hanya untuk demonstrasi.

335
00:18:41,400 --> 00:18:43,563
‫Jadi mari kita sebut ini di sini

336
00:18:44,400 --> 00:18:47,110
‫benar, dan sekarang ingat bahwa fungsi yang baru saja kita

337
00:18:47,110 --> 00:18:48,670
‫definisikan adalah metode yang diinstance.

338
00:18:48,670 --> 00:18:52,260
‫Dan karena itu tersedia di semua dokumen pengguna.

339
00:18:52,260 --> 00:18:54,780
‫Jadi variabel ini di sini sekarang

340
00:18:54,780 --> 00:18:57,050
‫adalah dokumen pengguna, bukan?

341
00:18:57,050 --> 00:19:00,270
‫Karena ini adalah hasil dari kueri model pengguna.

342
00:19:00,270 --> 00:19:03,637
‫Dan sekarang kita dapat mengatakan pengguna. kata sandi yang benar.

343
00:19:06,760 --> 00:19:10,650
‫Sekarang yang perlu kita lakukan adalah memasukkan kata sandi

344
00:19:10,650 --> 00:19:13,020
‫kandidat, yaitu kata sandi, ingat.

345
00:19:13,020 --> 00:19:17,830
‫Jadi yang ini di sini, dan kemudian userPassword.

346
00:19:17,830 --> 00:19:22,830
‫Dan begitulah di pengguna. kata sandi, oke?

347
00:19:23,450 --> 00:19:26,373
‫Jadi ini di sini sekarang akan benar atau salah.

348
00:19:27,990 --> 00:19:30,810
‫Baiklah, dan sekarang mari kita benar-benar menggunakan dua

349
00:19:30,810 --> 00:19:33,500
‫variabel ini untuk mengetahui apakah pengguna itu ada

350
00:19:33,500 --> 00:19:35,200
‫dan kata sandinya benar.

351
00:19:35,200 --> 00:19:36,710
‫Jadi kita sudah

352
00:19:36,710 --> 00:19:40,390
‫mengetahuinya, tetapi sekarang kita harus benar-benar menulis pernyataan if kita.

353
00:19:40,390 --> 00:19:45,390
‫Jadi jika tidak ada pengguna, atau kata sandi salah, maka

354
00:19:46,160 --> 00:19:49,853
‫pada dasarnya benar adalah salah, itulah artinya.

355
00:19:50,860 --> 00:19:54,590
‫Dalam hal ini, kami ingin, sekali lagi, kembali

356
00:19:54,590 --> 00:19:58,640
‫dan langsung menuju middleware kami berikutnya dengan AppError

357
00:19:58,640 --> 00:19:59,640
‫baru.

358
00:20:00,980 --> 00:20:05,973
‫Dan dalam hal ini mengatakan email atau kata sandi yang salah, oke?

359
00:20:08,990 --> 00:20:11,560
‫Dan kemudian kode statusnya

360
00:20:11,560 --> 00:20:14,870
‫adalah 401, yang berarti tidak sah, oke?

361
00:20:14,870 --> 00:20:16,910
‫Sekarang kita bisa melakukannya secara

362
00:20:16,910 --> 00:20:18,847
‫terpisah, jadi pertama-tama periksa

363
00:20:18,847 --> 00:20:21,440
‫pengguna, lalu periksa kata sandi yang benar.

364
00:20:21,440 --> 00:20:24,600
‫Tetapi dalam hal ini kami akan

365
00:20:24,600 --> 00:20:28,710
‫memberikan informasi penyerang potensial apakah email atau kata sandi salah.

366
00:20:28,710 --> 00:20:31,550
‫Dan cara ini di sini sedikit lebih kabur.

367
00:20:31,550 --> 00:20:34,830
‫Jadi kami tidak benar-benar menentukan apa yang salah di sini.

368
00:20:34,830 --> 00:20:37,060
‫Jadi jika itu email atau kata sandi.

369
00:20:37,060 --> 00:20:38,700
‫Jadi jika ada penyerang

370
00:20:38,700 --> 00:20:41,150
‫yang mencoba memasukkan beberapa data acak, maka

371
00:20:41,150 --> 00:20:43,640
‫mereka tidak akan tahu apakah email itu

372
00:20:43,640 --> 00:20:47,143
‫benar-benar ada, atau apakah itu hanya kata sandi yang salah, oke?

373
00:20:47,990 --> 00:20:50,860
‫Sekarang hanya dua hal di sini, dan yang

374
00:20:50,860 --> 00:20:53,140
‫pertama adalah bahwa kita benar-benar

375
00:20:53,140 --> 00:20:55,480
‫perlu menunggu fungsi asinkron ini, oke?

376
00:20:55,480 --> 00:20:57,470
‫Jadi ingat bahwa kata sandi yang benar

377
00:20:57,470 --> 00:20:59,000
‫adalah fungsi asinkron, jadi

378
00:20:59,000 --> 00:21:01,333
‫di sini kita juga perlu menunggu untuk itu.

379
00:21:02,690 --> 00:21:04,530
‫Dan kemudian ada masalah

380
00:21:04,530 --> 00:21:06,980
‫lain, karena pengguna ini tidak ada di

381
00:21:06,980 --> 00:21:10,950
‫sini, maka baris kode berikutnya ini benar-benar tidak dapat dijalankan, oke?

382
00:21:10,950 --> 00:21:13,550
‫Karena misalnya pengguna. kata sandi

383
00:21:13,550 --> 00:21:15,400
‫tidak akan tersedia.

384
00:21:15,400 --> 00:21:18,800
‫Jadi kita sebenarnya perlu memindahkan semua ini, atau sebenarnya

385
00:21:18,800 --> 00:21:20,690
‫hanya kode ini, kita

386
00:21:20,690 --> 00:21:24,343
‫akan memindahkannya ke sini ke dalam pernyataan if else.

387
00:21:26,740 --> 00:21:29,000
‫Baiklah, jadi begini, jika pengguna

388
00:21:29,000 --> 00:21:32,550
‫tidak ada, jadi jika ini benar, maka kode ini

389
00:21:32,550 --> 00:21:34,900
‫tidak akan dijalankan di sini, dan

390
00:21:34,900 --> 00:21:37,070
‫tidak akan ada masalah.

391
00:21:37,070 --> 00:21:40,510
‫Tetapi jika pengguna ada, maka itu juga akan menjalankan

392
00:21:40,510 --> 00:21:43,600
‫kode ini dan memeriksa apakah kata sandinya benar.

393
00:21:43,600 --> 00:21:45,520
‫Jadi jika kata sandinya benar,

394
00:21:45,520 --> 00:21:50,010
‫hanya dalam kasus itu kita akan pernah mencapai potongan kode ini di sini.

395
00:21:50,010 --> 00:21:52,710
‫Jadi itulah keseluruhan ide dari fungsi ini.

396
00:21:52,710 --> 00:21:55,030
‫Jadi pada dasarnya kami memeriksa negatifnya.

397
00:21:55,030 --> 00:21:57,270
‫Jadi jika tidak ada email dan tidak ada kata

398
00:21:57,270 --> 00:21:58,880
‫sandi, maka kami mendapatkan kesalahan ini.

399
00:21:58,880 --> 00:22:01,690
‫Jika tidak ada pengguna, atau jika ada kata sandi

400
00:22:01,690 --> 00:22:03,540
‫yang salah, buat kesalahan ini.

401
00:22:03,540 --> 00:22:05,610
‫Tetapi jika tidak ada kesalahan sama

402
00:22:05,610 --> 00:22:09,060
‫sekali, dalam hal ini kita mencapai bagian kode ini, di

403
00:22:09,060 --> 00:22:10,820
‫mana kita sekarang menghasilkan

404
00:22:10,820 --> 00:22:13,490
‫token dan kemudian mengirimkannya kembali ke pengguna.

405
00:22:13,490 --> 00:22:16,740
‫Sekarang membuat token ini akan menjadi hal yang sama persis seperti yang

406
00:22:16,740 --> 00:22:18,500
‫kita lakukan sebelumnya di sini.

407
00:22:18,500 --> 00:22:20,780
‫Jadi daripada mengulang semua kode

408
00:22:20,780 --> 00:22:24,210
‫ini, mari kita buat fungsi untuk ini, oke?

409
00:22:24,210 --> 00:22:25,840
‫Jadi saya akan

410
00:22:25,840 --> 00:22:29,427
‫menyalin kode ini, dan kemudian di sini dengan sangat

411
00:22:31,900 --> 00:22:36,090
‫cepat const signToken, yang akan menerima sebagai satu-satunya masukan ID pengguna.

412
00:22:36,090 --> 00:22:41,090
‫Jadi ID, dan itu akan mengembalikan token, oke?

413
00:22:43,370 --> 00:22:46,793
‫Jadi itu hanya akan menandatangani ini dan mengembalikannya segera.

414
00:22:47,700 --> 00:22:50,920
‫Baiklah, jadi di sini yang

415
00:22:50,920 --> 00:22:55,920
‫akan kita lakukan adalah menandatangani Token dan memasukkan ID ini.

416
00:23:04,970 --> 00:23:09,330
‫Dan tentu saja kita juga perlu mengubahnya di sini, oke?

417
00:23:09,330 --> 00:23:11,750
‫Jadi set ID ini ke ID ini,

418
00:23:11,750 --> 00:23:14,893
‫yang seperti yang sudah Anda ketahui saat ini sama dengan ini.

419
00:23:15,950 --> 00:23:19,763
‫Baiklah, dan sekarang mari kita lanjutkan dan lakukan hal yang sama di sini.

420
00:23:22,547 --> 00:23:26,340
‫signToken, dan dalam hal ini adalah pengguna. _Indo.

421
00:23:31,300 --> 00:23:33,910
‫Fiuh, itu kuliah yang

422
00:23:33,910 --> 00:23:37,090
‫panjang, mari kita lanjutkan dan mencobanya.

423
00:23:37,090 --> 00:23:38,363
‫Jadi sekarang harus bekerja.

424
00:23:39,250 --> 00:23:43,470
‫Jadi ingat, sekarang ini adalah pengguna lain, tetapi saya tahu bahwa ini

425
00:23:43,470 --> 00:23:46,030
‫adalah kata sandi yang saya gunakan.

426
00:23:46,030 --> 00:23:48,580
‫Jadi sekarang mari kita gunakan yang lain,

427
00:23:48,580 --> 00:23:52,003
‫jadi hanya test12, dan mari kita lihat apa yang terjadi.

428
00:23:53,540 --> 00:23:57,450
‫Mari kita tunggu, dan memang, email atau kata sandi salah.

429
00:23:57,450 --> 00:24:00,230
‫Dan tentu saja kami mendapatkan 401,

430
00:24:00,230 --> 00:24:04,600
‫dan memang itu berarti kode kami saat ini sedang menguji

431
00:24:04,600 --> 00:24:05,933
‫kata sandi.

432
00:24:06,780 --> 00:24:10,230
‫Jadi jika kita sekarang memilih kata sandi yang benar, maka itu

433
00:24:10,230 --> 00:24:12,793
‫harus lulus, jadi mari kita tunggu saja.

434
00:24:13,760 --> 00:24:16,760
‫Tapi, kami masih mendapatkan kesalahan ini.

435
00:24:16,760 --> 00:24:20,453
‫Nah, jadi mari kita singkirkan semua pengguna kita di sini,

436
00:24:22,170 --> 00:24:24,420
‫hanya untuk memastikan bahwa itu

437
00:24:24,420 --> 00:24:28,740
‫tidak ada hubungannya dengan pengguna, dan kemudian buat yang baru, oke.

438
00:24:33,080 --> 00:24:37,473
‫Jadi halo@jonas, dan pass1234.

439
00:24:38,710 --> 00:24:42,373
‫Mari kita lanjutkan dan salin, saya akan mengirimkannya sekarang.

440
00:24:46,800 --> 00:24:50,070
‫Dan kredensial ini sekarang pasti benar.

441
00:24:50,070 --> 00:24:52,760
‫Jadi jika tidak bekerja sekarang ada semacam bug.

442
00:24:52,760 --> 00:24:55,870
‫Tapi sekarang benar-benar berhasil, bagus.

443
00:24:55,870 --> 00:25:00,090
‫Jadi di sini adalah token kami, dan terlihat persis seperti sebelumnya, jadi

444
00:25:00,090 --> 00:25:02,483
‫kami dapat berasumsi bahwa itu benar.

445
00:25:03,570 --> 00:25:06,333
‫Sekarang mari kita coba lagi, hapus ini, oke.

446
00:25:07,810 --> 00:25:10,753
‫Dan dengan kata sandi yang salah itu tidak berfungsi.

447
00:25:11,890 --> 00:25:15,423
‫Sekarang mari kita memasukkan kata sandi yang benar dan email yang salah, dan kemudian

448
00:25:18,230 --> 00:25:19,730
‫kita mendapatkan kesalahan yang sama.

449
00:25:19,730 --> 00:25:21,883
‫Jadi salah email atau password.

450
00:25:22,930 --> 00:25:25,560
‫Dan lagi jika kita mengembalikan semuanya, maka

451
00:25:25,560 --> 00:25:27,560
‫kita mendapatkan token baru.

452
00:25:27,560 --> 00:25:30,810
‫Dan jadi kita sekarang benar-benar masuk ke dalam aplikasi.

453
00:25:30,810 --> 00:25:33,580
‫Dan saya tahu ini mungkin terlihat agak

454
00:25:33,580 --> 00:25:37,340
‫abstrak, jadi yang kita dapatkan hanyalah token, dan itu

455
00:25:37,340 --> 00:25:40,020
‫berarti kita masuk ke aplikasi, bukan?

456
00:25:40,020 --> 00:25:44,720
‫Tapi, begitulah cara kerjanya pada otentikasi stateless.

457
00:25:44,720 --> 00:25:47,810
‫Nantinya ketika kita benar-benar membangun website dinamis,

458
00:25:47,810 --> 00:25:50,190
‫maka tentunya akan lebih

459
00:25:50,190 --> 00:25:53,900
‫terlihat jika pengguna sedang login atau logout kan?

460
00:25:53,900 --> 00:25:55,920
‫Tapi itu masih akan bekerja di belakang

461
00:25:55,920 --> 00:25:57,670
‫layar menggunakan token yang sama ini.

462
00:25:57,670 --> 00:26:01,560
‫Jadi jika tidak ada token, maka situs web akan terlihat

463
00:26:01,560 --> 00:26:03,800
‫satu arah, dan jika ada

464
00:26:03,800 --> 00:26:06,630
‫token maka situs web akan melihat ke arah

465
00:26:06,630 --> 00:26:11,150
‫lain, dengan gambar pengguna dan nama pengguna yang ada di situs web, misalnya.

466
00:26:11,150 --> 00:26:13,373
‫Bagaimanapun, ini adalah kuliah yang cukup panjang.

467
00:26:14,370 --> 00:26:17,100
‫Pastikan untuk kembali ke sini dan benar-benar

468
00:26:17,100 --> 00:26:20,210
‫mencoba memahami semua kode yang kita miliki di sini, oke?

469
00:26:20,210 --> 00:26:21,870
‫Karena saya tahu bahwa

470
00:26:21,870 --> 00:26:23,660
‫beberapa di antaranya mungkin agak membingungkan.

471
00:26:23,660 --> 00:26:26,963
‫Misalnya, fungsi correctPassword ini di sini.

472
00:26:27,850 --> 00:26:30,933
‫Dan kemudian saya yakin semuanya akan masuk akal bagi Anda.

