﻿1
00:00:00,960 --> 00:00:02,570
‫Instruktur: Jadi, sekarang

2
00:00:02,570 --> 00:00:06,600
‫kita perlu mengirim token reset kata sandi melalui email ke pengguna.

3
00:00:06,600 --> 00:00:08,860
‫Jadi dalam kuliah ini, kita akan

4
00:00:08,860 --> 00:00:12,140
‫belajar cara mengirim email menggunakan solusi yang sangat populer

5
00:00:12,140 --> 00:00:13,630
‫yang disebut Nodemailer.

6
00:00:15,154 --> 00:00:17,600
‫Tetapi sebelum kita melakukannya, saya sebenarnya ingin

7
00:00:17,600 --> 00:00:20,840
‫menunjukkan kepada Anda efek dari tidak adanya opsi ini di sini,

8
00:00:20,840 --> 00:00:23,540
‫karena sebenarnya saya tidak pernah menunjukkannya kepada Anda sebelumnya.

9
00:00:23,540 --> 00:00:26,543
‫Jadi mari kita potong di sini, coba sekarang, lagi,

10
00:00:28,910 --> 00:00:31,720
‫dan sekarang Anda melihat semua kesalahan ini muncul

11
00:00:31,720 --> 00:00:33,890
‫seperti tolong konfirmasikan kata sandi Anda.

12
00:00:33,890 --> 00:00:36,010
‫Dan, sebenarnya, seharusnya ada lebih

13
00:00:36,010 --> 00:00:39,340
‫banyak lagi, tapi, yah, ini yang pertama Anda dapatkan.

14
00:00:39,340 --> 00:00:41,400
‫Pada dasarnya, karena kami tidak memiliki

15
00:00:41,400 --> 00:00:43,650
‫nilai apa pun di bidang konfirmasi kata sandi.

16
00:00:43,650 --> 00:00:44,483
‫Oke?

17
00:00:44,483 --> 00:00:46,600
‫Dan sekali lagi, itu karena validasi dan

18
00:00:46,600 --> 00:00:49,330
‫sekali lagi kita dapat, tentu saja, dengan mudah

19
00:00:49,330 --> 00:00:51,083
‫mematikannya dengan opsi ini.

20
00:00:53,430 --> 00:00:56,600
‫Tapi bagaimanapun, sekarang mari kita buat fungsi pengendali email yang

21
00:00:56,600 --> 00:00:59,580
‫kemudian dapat kita gunakan di seluruh aplikasi kita.

22
00:00:59,580 --> 00:01:00,860
‫Jadi saya

23
00:01:00,860 --> 00:01:02,673
‫akan melakukannya di sini di

24
00:01:04,210 --> 00:01:08,440
‫folder Utilities, lagi, dan menyebutnya email. js.

25
00:01:08,440 --> 00:01:09,650
‫Baiklah?

26
00:01:09,650 --> 00:01:11,410
‫Dan sebelum kita melakukan

27
00:01:11,410 --> 00:01:14,240
‫hal lain, mari kita instal paket Nodemailer.

28
00:01:14,240 --> 00:01:16,120
‫Jadi itulah paket yang saya sebutkan di

29
00:01:16,120 --> 00:01:17,390
‫awal, yang akan kita

30
00:01:17,390 --> 00:01:20,723
‫gunakan untuk mengirim email menggunakan Node.js. js.

31
00:01:23,130 --> 00:01:27,620
‫Jadi, seperti biasa, npm install nodemailer.

32
00:01:34,170 --> 00:01:35,123
‫Dan di sini.

33
00:01:42,674 --> 00:01:46,423
‫Baiklah, dan sekarang mari kita buat fungsi itu di sini.

34
00:01:49,500 --> 00:01:51,113
‫Jadi email yang konstan,

35
00:01:52,880 --> 00:01:54,350
‫oke, dan kemudian

36
00:01:54,350 --> 00:01:58,060
‫di sini, kami akan memberikan beberapa opsi pada dasarnya.

37
00:01:58,060 --> 00:02:01,090
‫Jadi alamat email tempat kita ingin mengirim

38
00:02:01,090 --> 00:02:03,780
‫email, baris subjek, konten email, dan

39
00:02:03,780 --> 00:02:05,803
‫mungkin beberapa hal lainnya.

40
00:02:07,625 --> 00:02:08,780
‫Baiklah.

41
00:02:08,780 --> 00:02:11,180
‫Jadi sekarang kita perlu mengikuti

42
00:02:11,180 --> 00:02:13,950
‫tiga langkah untuk mengirim email dengan Nodemailer.

43
00:02:15,120 --> 00:02:18,783
‫Jadi pertama-tama, kita perlu membuat transporter.

44
00:02:23,950 --> 00:02:24,963
‫Kemudian

45
00:02:27,340 --> 00:02:31,777
‫kedua, kita perlu menentukan opsi email, pada dasarnya,

46
00:02:35,330 --> 00:02:36,373
‫dan pada

47
00:02:37,930 --> 00:02:41,820
‫akhirnya, benar-benar mengirim email dengan Nodemailer.

48
00:02:41,820 --> 00:02:42,960
‫Oke?

49
00:02:42,960 --> 00:02:46,260
‫Jadi, transporter yang kita buat pada langkah pertama

50
00:02:46,260 --> 00:02:50,790
‫di sini, pada dasarnya adalah sebuah layanan yang sebenarnya akan mengirim email,

51
00:02:50,790 --> 00:02:53,610
‫karena bukan node. js yang sebenarnya

52
00:02:53,610 --> 00:02:55,220
‫akan mengirim email itu sendiri.

53
00:02:55,220 --> 00:02:57,720
‫Ini hanya layanan yang kami definisikan di sini.

54
00:02:57,720 --> 00:03:00,340
‫Sesuatu seperti Gmail, misalnya.

55
00:03:00,340 --> 00:03:02,270
‫Sekarang, Gmail sebenarnya bukan layanan

56
00:03:02,270 --> 00:03:03,370
‫yang akan

57
00:03:03,370 --> 00:03:05,760
‫kita gunakan, tapi izinkan saya menunjukkan

58
00:03:05,760 --> 00:03:08,350
‫cara kerjanya dengan Gmail, karena saya tahu

59
00:03:08,350 --> 00:03:10,810
‫banyak orang akan tertarik dengan ini, oke?

60
00:03:10,810 --> 00:03:15,120
‫Jadi, bagaimanapun, kita harus selalu membuat transporter, dan itu selalu sama, tidak

61
00:03:15,120 --> 00:03:16,260
‫peduli layanan

62
00:03:16,260 --> 00:03:18,210
‫apa yang akan kita gunakan.

63
00:03:20,070 --> 00:03:22,410
‫Jadi transporter akan menjadi

64
00:03:22,410 --> 00:03:24,577
‫nodemailer. createTransport dan

65
00:03:28,660 --> 00:03:31,550
‫kemudian, tentu saja, kita memerlukan beberapa opsi di sana.

66
00:03:31,550 --> 00:03:32,920
‫Baiklah?

67
00:03:32,920 --> 00:03:35,820
‫Jadi kami dapat menentukan layanan dan kami dapat

68
00:03:37,620 --> 00:03:40,360
‫mengatakan bahwa kami ingin menggunakan Gmail.

69
00:03:40,360 --> 00:03:42,110
‫Jadi, seperti ini.

70
00:03:42,110 --> 00:03:44,530
‫Dan ada beberapa layanan terkenal

71
00:03:44,530 --> 00:03:47,260
‫yang Nodemailer tahu bagaimana menanganinya, jadi

72
00:03:47,260 --> 00:03:49,870
‫kita tidak perlu mengonfigurasinya secara manual.

73
00:03:49,870 --> 00:03:52,660
‫Dan Gmail hanyalah salah satunya.

74
00:03:52,660 --> 00:03:56,863
‫Tapi juga ada Yahoo, atau Hotmail, atau banyak lainnya, oke?

75
00:03:57,760 --> 00:03:58,980
‫Jadi itulah

76
00:03:58,980 --> 00:04:03,020
‫layanannya, dan kemudian kita juga perlu menentukan properti auth, jadi

77
00:04:03,020 --> 00:04:04,783
‫pada dasarnya untuk otentikasi.

78
00:04:06,150 --> 00:04:08,730
‫Jadi kita membutuhkan user dan password.

79
00:04:08,730 --> 00:04:10,380
‫Dan seperti sebelumnya, kami menyimpan

80
00:04:10,380 --> 00:04:14,253
‫hal-hal semacam itu di konfigurasi kami. n berkas.

81
00:04:15,840 --> 00:04:16,673
‫Baiklah.

82
00:04:17,930 --> 00:04:18,963
‫Jadi email,

83
00:04:21,090 --> 00:04:22,253
‫itu nama pengguna,

84
00:04:23,500 --> 00:04:26,700
‫dan sekarang saya tidak akan menggunakan alamat Gmail

85
00:04:26,700 --> 00:04:28,963
‫asli di sini karena, sekali lagi,

86
00:04:29,910 --> 00:04:34,140
‫kami tidak menggunakan Gmail, tetapi hanya sebagai contoh di sini, oke.

87
00:04:34,140 --> 00:04:36,910
‫Kata sandi Anda.

88
00:04:36,910 --> 00:04:38,350
‫Baiklah.

89
00:04:38,350 --> 00:04:40,480
‫Jadi di sini kita selesai,

90
00:04:40,480 --> 00:04:41,350
‫katakanlah,

91
00:04:43,090 --> 00:04:44,830
‫proses dot end dot

92
00:04:47,414 --> 00:04:48,581
‫EMAIL_USERNAME proses

93
00:04:53,780 --> 00:04:56,113
‫sandi dot end dot EMAIL_PASSWORD

94
00:04:58,310 --> 00:04:59,800
‫dan saya harap

95
00:05:02,650 --> 00:05:04,723
‫saya mengejanya dengan benar.

96
00:05:05,580 --> 00:05:06,413
‫Oke?

97
00:05:06,413 --> 00:05:07,970
‫Dan ini

98
00:05:07,970 --> 00:05:10,610
‫adalah konfigurasi untuk transport di Nodemailer.

99
00:05:10,610 --> 00:05:12,400
‫Kemudian di akun Gmail Anda,

100
00:05:12,400 --> 00:05:14,160
‫Anda benar-benar harus

101
00:05:14,160 --> 00:05:17,346
‫mengaktifkan sesuatu yang disebut opsi aplikasi yang kurang aman.

102
00:05:17,346 --> 00:05:18,896
‫Jadi izinkan saya menuliskannya di sini.

103
00:05:27,609 --> 00:05:29,640
‫Dan sekali lagi, saya tidak akan melakukannya

104
00:05:29,640 --> 00:05:31,020
‫di sini, tetapi saya

105
00:05:31,020 --> 00:05:33,160
‫tahu bahwa banyak orang akan benar-benar ingin menggunakannya.

106
00:05:33,160 --> 00:05:35,710
‫Dan alasan mengapa kami tidak menggunakan Gmail

107
00:05:35,710 --> 00:05:37,200
‫dalam aplikasi ini adalah

108
00:05:37,200 --> 00:05:40,170
‫karena Gmail sama sekali bukan ide yang baik

109
00:05:40,170 --> 00:05:41,510
‫untuk aplikasi produksi.

110
00:05:41,510 --> 00:05:44,170
‫Dan pada dasarnya itulah yang kami coba bangun di sini.

111
00:05:44,170 --> 00:05:45,003
‫Oke?

112
00:05:45,003 --> 00:05:47,600
‫Jadi menggunakan Gmail untuk hal semacam

113
00:05:47,600 --> 00:05:50,670
‫ini, Anda hanya dapat mengirim 500 email per

114
00:05:50,670 --> 00:05:53,520
‫hari, dan juga, Anda mungkin akan dengan

115
00:05:53,520 --> 00:05:57,410
‫cepat ditandai sebagai spammer, dan dari sana, itu hanya akan menurun.

116
00:05:57,410 --> 00:05:58,330
‫Baiklah?

117
00:05:58,330 --> 00:06:00,710
‫Jadi, kecuali itu seperti aplikasi pribadi, dan

118
00:06:00,710 --> 00:06:02,780
‫Anda hanya mengirim email ke

119
00:06:02,780 --> 00:06:04,470
‫diri sendiri, atau, seperti,

120
00:06:04,470 --> 00:06:07,090
‫10 teman, ya, Anda harus menggunakan layanan lain.

121
00:06:07,090 --> 00:06:10,680
‫Dan beberapa yang terkenal adalah SendGrid dan Mailgun.

122
00:06:10,680 --> 00:06:13,740
‫Dan, sebenarnya, kita akan menggunakan SendGrid nanti

123
00:06:13,740 --> 00:06:15,180
‫dalam kursus ini.

124
00:06:15,180 --> 00:06:17,400
‫Sekarang, yang akan kita lakukan

125
00:06:17,400 --> 00:06:19,920
‫sekarang adalah menggunakan layanan pengembangan khusus,

126
00:06:19,920 --> 00:06:23,740
‫yang pada dasarnya palsu untuk mengirim email ke alamat asli.

127
00:06:23,740 --> 00:06:26,660
‫Namun, pada kenyataannya, email-email ini akhirnya terjebak

128
00:06:26,660 --> 00:06:29,920
‫dalam kotak masuk pengembangan, sehingga kami dapat melihat

129
00:06:29,920 --> 00:06:32,320
‫bagaimana tampilannya nanti dalam produksi.

130
00:06:32,320 --> 00:06:33,270
‫Baiklah?

131
00:06:33,270 --> 00:06:35,700
‫Jadi layanan itu disebut Mailtrap, jadi sekarang

132
00:06:35,700 --> 00:06:37,893
‫mari kita mendaftar untuk itu.

133
00:06:41,190 --> 00:06:42,023
‫Jadi.

134
00:06:43,500 --> 00:06:48,643
‫Perangkap surat. io, oke?

135
00:06:48,643 --> 00:06:51,050
‫Jadi, dan seperti yang saya katakan, pengujian email

136
00:06:51,050 --> 00:06:52,940
‫yang aman untuk staging dan pengembangan.

137
00:06:52,940 --> 00:06:54,280
‫Jadi pada dasarnya,

138
00:06:54,280 --> 00:06:57,410
‫dengan layanan ini, Anda dapat memalsukan untuk mengirim email ke

139
00:06:57,410 --> 00:07:00,230
‫klien, tetapi email ini tidak akan pernah sampai

140
00:07:00,230 --> 00:07:03,670
‫ke klien ini, dan malah terjebak di Mailtrap Anda, oke?

141
00:07:03,670 --> 00:07:05,660
‫Dan dengan demikian Anda

142
00:07:05,660 --> 00:07:09,150
‫tidak dapat secara tidak sengaja mengirim beberapa email pengembangan

143
00:07:09,150 --> 00:07:11,540
‫ke semua klien atau pengguna Anda, oke.

144
00:07:11,540 --> 00:07:13,450
‫Jadi pergi ke depan dan mendaftar sekarang.

145
00:07:13,450 --> 00:07:15,430
‫Saya, tentu saja, sudah memiliki akun saya,

146
00:07:15,430 --> 00:07:17,040
‫jadi saya akan masuk sekarang.

147
00:07:17,040 --> 00:07:19,390
‫Jadi sampai jumpa lagi, setelah

148
00:07:19,390 --> 00:07:21,600
‫Anda membuat akun gratis.

149
00:07:21,600 --> 00:07:24,350
‫Baiklah, jadi setelah membuat akun

150
00:07:24,350 --> 00:07:27,290
‫Anda, mungkin akan terlihat sedikit seperti ini.

151
00:07:27,290 --> 00:07:29,630
‫Sekarang, Anda tidak akan memiliki kotak masuk untuk

152
00:07:29,630 --> 00:07:31,810
‫saat ini, jadi mari kita buat yang baru,

153
00:07:31,810 --> 00:07:32,970
‫dengan nama natours.

154
00:07:32,970 --> 00:07:36,200
‫Jadi, saya sudah punya satu, tapi buat yang baru di

155
00:07:36,200 --> 00:07:39,260
‫sini, dengan nama natours, lalu tekan Create Inbox.

156
00:07:39,260 --> 00:07:40,093
‫Baiklah?

157
00:07:40,093 --> 00:07:41,520
‫Kemudian kami dapat membukanya,

158
00:07:41,520 --> 00:07:44,280
‫dan Anda melihat kami tidak memiliki email pada saat

159
00:07:44,280 --> 00:07:45,950
‫ini, tetapi yang penting untuk

160
00:07:45,950 --> 00:07:48,170
‫saat ini adalah kredensial ini di sini.

161
00:07:48,170 --> 00:07:50,310
‫Jadi Anda lihat kami memiliki host kami

162
00:07:50,310 --> 00:07:53,120
‫di sini, kami memiliki port, nama pengguna, dan kata sandi.

163
00:07:53,120 --> 00:07:54,990
‫Dan itulah yang akan kita

164
00:07:54,990 --> 00:07:57,580
‫tentukan dalam transport kita di Nodemailer sekarang.

165
00:07:57,580 --> 00:07:58,413
‫Baiklah?

166
00:07:58,413 --> 00:08:00,810
‫Jadi mari kita mulai dengan host,

167
00:08:00,810 --> 00:08:02,060
‫sebenarnya, dengan

168
00:08:02,060 --> 00:08:04,320
‫nama pengguna, jadi dua ini, saya

169
00:08:04,320 --> 00:08:07,933
‫hanya perlu menyalin jadi mari kita salin ke file konfigurasi

170
00:08:09,100 --> 00:08:11,323
‫kita, jadi itu nama pengguna, lalu

171
00:08:13,220 --> 00:08:14,723
‫itu kata sandi, dan

172
00:08:18,620 --> 00:08:21,813
‫sekarang kita sebenarnya juga perlu tentukan tuan rumah.

173
00:08:28,580 --> 00:08:31,830
‫Oke, dan itu karena Mailtrap bukan salah

174
00:08:31,830 --> 00:08:35,493
‫satu dari layanan standar yang disertakan dengan Nodemailer.

175
00:08:39,720 --> 00:08:40,553
‫Baiklah.

176
00:08:44,800 --> 00:08:46,433
‫Pelabuhannya 25.

177
00:08:47,780 --> 00:08:49,660
‫Jadi simpan saja, dan

178
00:08:49,660 --> 00:08:53,390
‫kemudian di sini, mari kita singkirkan ini, dan

179
00:08:53,390 --> 00:08:56,690
‫yang perlu saya tentukan sebagai gantinya adalah

180
00:08:57,730 --> 00:08:58,803
‫host

181
00:09:00,040 --> 00:09:01,460
‫jadi email, host,

182
00:09:01,460 --> 00:09:03,430
‫dan, tentu saja, port.

183
00:09:03,430 --> 00:09:05,773
‫Jadi semua yang baru saja kita simpan sebelumnya.

184
00:09:10,800 --> 00:09:12,950
‫Baiklah, maka otentikasi di sini

185
00:09:12,950 --> 00:09:14,323
‫sama persis.

186
00:09:15,790 --> 00:09:17,643
‫Mari kita singkirkan ini

187
00:09:19,888 --> 00:09:22,200
‫juga, dan lanjutkan ke langkah nomor dua.

188
00:09:22,200 --> 00:09:24,913
‫Jadi pada dasarnya mendefinisikan beberapa opsi untuk email kita.

189
00:09:29,440 --> 00:09:31,700
‫Baiklah, dan kita tentu saja dapat

190
00:09:31,700 --> 00:09:34,320
‫melakukan langkah kedua dan ketiga secara bersamaan, tetapi saya

191
00:09:34,320 --> 00:09:36,970
‫lebih suka memilih opsi ini di sini terlebih dahulu.

192
00:09:37,810 --> 00:09:39,910
‫Oke, jadi di sini kita

193
00:09:39,910 --> 00:09:41,603
‫tentukan dari mana email

194
00:09:42,660 --> 00:09:43,713
‫itu berasal,

195
00:09:45,890 --> 00:09:48,963
‫jadi namanya, lalu alamat emailnya seperti ini.

196
00:09:52,800 --> 00:09:55,453
‫Selanjutnya, kita memerlukan alamat penerima,

197
00:09:57,500 --> 00:10:01,153
‫dan yang itu, saya akan tentukan sebagai opsi,

198
00:10:03,200 --> 00:10:04,033
‫oke?

199
00:10:04,033 --> 00:10:06,560
‫Jadi pada dasarnya, datang sebagai argumen untuk fungsi ini.

200
00:10:06,560 --> 00:10:08,650
‫Jadi objek opsi ini di sini,

201
00:10:08,650 --> 00:10:11,173
‫apakah ini yang kita masukkan ke dalam fungsi.

202
00:10:12,110 --> 00:10:13,370
‫Baiklah.

203
00:10:13,370 --> 00:10:17,263
‫Kemudian sebenarnya sama untuk subjek dan untuk teks.

204
00:10:18,990 --> 00:10:20,593
‫Mari kita gandakan

205
00:10:26,250 --> 00:10:28,170
‫ini di sini, Jadi subjek

206
00:10:29,300 --> 00:10:31,720
‫dan kemudian kita hanya menentukan properti teks,

207
00:10:31,720 --> 00:10:34,793
‫dan yang itu, dalam opsi, saya menyebutnya pesan.

208
00:10:35,790 --> 00:10:38,070
‫Baiklah, jadi yang ini pada dasarnya adalah

209
00:10:38,070 --> 00:10:39,950
‫versi teks dari email.

210
00:10:39,950 --> 00:10:44,220
‫Tapi kita juga bisa menentukan properti HTML.

211
00:10:44,220 --> 00:10:48,220
‫Oke, jadi sekarang kita bisa mengonversi pesan ini ke HTML.

212
00:10:48,220 --> 00:10:50,460
‫Dan nanti, kita akan melakukan itu, tapi

213
00:10:50,460 --> 00:10:54,780
‫untuk saat ini, mari kita tetap sederhana dan tidak menentukan HTML di sini, sama sekali.

214
00:10:54,780 --> 00:10:55,613
‫Oke?

215
00:10:55,613 --> 00:10:57,993
‫Jadi cukup tinggalkan di teks.

216
00:10:59,320 --> 00:11:00,153
‫Oke!

217
00:11:00,153 --> 00:11:01,773
‫Dan akhirnya, pada

218
00:11:03,050 --> 00:11:06,723
‫akhirnya, transporter, jadi itulah objek transporter yang kita buat

219
00:11:06,723 --> 00:11:09,440
‫di sini di awal, dan di

220
00:11:09,440 --> 00:11:11,890
‫atasnya, kita bisa memanggil sendMail

221
00:11:14,470 --> 00:11:18,983
‫dan ke dalamnya kita harus memasukkan opsi email kita, oke?

222
00:11:19,900 --> 00:11:22,640
‫Dan sekarang ini benar-benar mengembalikan Janji.

223
00:11:22,640 --> 00:11:25,890
‫Oke, sekali lagi, ini adalah fungsi asinkron,

224
00:11:25,890 --> 00:11:29,480
‫dan karena kita tidak ingin langsung bekerja dengan Promises,

225
00:11:29,480 --> 00:11:30,933
‫mari gunakan async/await.

226
00:11:32,890 --> 00:11:33,723
‫Baiklah.

227
00:11:34,770 --> 00:11:37,450
‫Jadi mendeklarasikan ini sebagai fungsi async

228
00:11:37,450 --> 00:11:39,023
‫dan begitulah.

229
00:11:40,030 --> 00:11:41,070
‫Baiklah.

230
00:11:41,070 --> 00:11:43,250
‫Kami tidak ingin menyimpan hasil apa pun

231
00:11:43,250 --> 00:11:46,423
‫di sini, yang kami bisa, tetapi saya tidak terlalu tertarik dengan itu.

232
00:11:47,940 --> 00:11:51,930
‫Oke, dan sekarang mari kita ekspor sebagai

233
00:11:51,930 --> 00:11:54,263
‫default dari modul ini.

234
00:11:57,990 --> 00:11:59,360
‫Oke, terlihat bagus!

235
00:11:59,360 --> 00:12:02,890
‫Sekarang mari kita lanjutkan dan benar-benar mencoba ini.

236
00:12:02,890 --> 00:12:07,050
‫Dan untuk memulai, kita perlu mengimpornya di sini, tentu saja.

237
00:12:07,050 --> 00:12:09,003
‫Jadi mari kita gandakan

238
00:12:13,270 --> 00:12:14,370
‫ini

239
00:12:14,370 --> 00:12:19,163
‫di sini, jadi ini email, dan fungsinya disebut sendEmail.

240
00:12:21,573 --> 00:12:22,406
‫Oke.

241
00:12:22,406 --> 00:12:26,513
‫Jadi mari kita kembali ke fungsi middleware kita di sini, dan

242
00:12:28,540 --> 00:12:31,397
‫mari kita mulai dengan mendefinisikan URL reset.

243
00:12:33,890 --> 00:12:37,810
‫Jadi, idealnya, pengguna kemudian mengklik email ini dan

244
00:12:37,810 --> 00:12:41,240
‫kemudian dapat melakukan permintaan dari sana.

245
00:12:41,240 --> 00:12:42,500
‫Dan itu akan

246
00:12:42,500 --> 00:12:44,650
‫berfungsi nanti saat kami menerapkan situs web

247
00:12:44,650 --> 00:12:48,170
‫dinamis kami, tetapi tetap saja, kami sekarang ingin membuat URL ini

248
00:12:48,170 --> 00:12:50,350
‫di sini, sehingga pengguna dapat dengan mudah

249
00:12:50,350 --> 00:12:52,433
‫menyalinnya, untuk mempermudah melakukan permintaan ini.

250
00:12:53,720 --> 00:12:56,130
‫Oke, jadi pada dasarnya kita perlu

251
00:12:57,350 --> 00:13:00,750
‫membuat ulang struktur URL yang kita miliki di sini.

252
00:13:00,750 --> 00:13:02,627
‫Jadi yang ini untuk lupa kata sandi dan

253
00:13:02,627 --> 00:13:04,227
‫mari kita simpan di sini.

254
00:13:10,670 --> 00:13:14,910
‫Jadi, lupa password, dan sekarang URL yang kita

255
00:13:14,910 --> 00:13:17,820
‫buat sebenarnya untuk reset password.

256
00:13:17,820 --> 00:13:21,340
‫Jadi, ingat, kami benar-benar menerapkan yang itu sebelumnya.

257
00:13:21,340 --> 00:13:22,173
‫Oke.

258
00:13:22,173 --> 00:13:24,020
‫Mari kita lanjutkan dan

259
00:13:27,760 --> 00:13:31,750
‫salin di sini, jadi setel ulang kata sandi, oke?

260
00:13:31,750 --> 00:13:33,940
‫Dan itu kemudian akan benar-benar mengambil

261
00:13:33,940 --> 00:13:35,540
‫token sebagai parameter.

262
00:13:35,540 --> 00:13:39,120
‫Oke, jadi mari kita taruh token acak di sini untuk saat ini.

263
00:13:39,120 --> 00:13:40,563
‫Jadi tidak masalah sama sekali.

264
00:13:41,610 --> 00:13:42,860
‫Biar

265
00:13:45,150 --> 00:13:50,150
‫saya simpan saja disini, sebagai reset password.

266
00:13:50,360 --> 00:13:51,193
‫Oke.

267
00:13:51,193 --> 00:13:53,970
‫Dan juga, ini bukan GET, juga

268
00:13:53,970 --> 00:13:56,320
‫bukan POST, tetapi PATCH, karena

269
00:13:56,320 --> 00:13:59,490
‫hasil dari ini adalah modifikasi properti kata

270
00:13:59,490 --> 00:14:01,560
‫sandi di dokumen pengguna.

271
00:14:01,560 --> 00:14:05,470
‫Dan sebenarnya PATCH adalah yang terbaik, oke?

272
00:14:05,470 --> 00:14:09,023
‫Jadi mari kita cepat mengubah implementasi rute kita untuk ini.

273
00:14:10,720 --> 00:14:14,410
‫Jadi, ini ada di userRoute, jadi ini

274
00:14:14,410 --> 00:14:17,480
‫bukan POST, ini PATCH,

275
00:14:17,480 --> 00:14:20,710
‫dan kami juga ingin menentukan parameter.

276
00:14:20,710 --> 00:14:22,330
‫Jadi, ingat bagaimana kita melakukannya.

277
00:14:22,330 --> 00:14:24,030
‫Jadi seperti di bawah sini.

278
00:14:24,030 --> 00:14:26,960
‫Jadi garis miring lagi kemudian titik dua, dan

279
00:14:26,960 --> 00:14:29,593
‫kemudian nama parameternya, yang akan menjadi token.

280
00:14:31,390 --> 00:14:32,990
‫Oke, dan mari kita

281
00:14:32,990 --> 00:14:34,870
‫buat ini sekarang, dimulai dengan protokolnya.

282
00:14:34,870 --> 00:14:38,340
‫Jadi, HTTP atau HTTPS, oke?

283
00:14:38,340 --> 00:14:42,283
‫Dan pada dasarnya kami akan mendapatkan data itu dari permintaan kami.

284
00:14:43,180 --> 00:14:45,720
‫Jadi itu disimpan pada protokol titik

285
00:14:47,250 --> 00:14:51,750
‫permintaan lalu garis miring titik dua, dan kemudian tuan rumah, oke?

286
00:14:51,750 --> 00:14:54,590
‫Jadi kami pada dasarnya mempersiapkan yang satu ini di

287
00:14:54,590 --> 00:14:57,260
‫sini untuk bekerja baik dalam pengembangan maupun produksi.

288
00:14:57,260 --> 00:15:00,630
‫Jadi, minta dot get, lalu

289
00:15:00,630 --> 00:15:01,513
‫host.

290
00:15:02,760 --> 00:15:04,950
‫Baiklah, jadi beginilah cara kita mendapatkan

291
00:15:04,950 --> 00:15:09,100
‫host, lalu slash api slash versi satu, dan saya rasa tidak

292
00:15:09,100 --> 00:15:11,860
‫ideal untuk mendefinisikan tier hardcoded seperti ini,

293
00:15:11,860 --> 00:15:13,170
‫tapi sekali

294
00:15:13,170 --> 00:15:15,260
‫lagi, ini adalah sesuatu yang

295
00:15:15,260 --> 00:15:17,080
‫akan kita perbaiki nanti, Oke?

296
00:15:17,080 --> 00:15:20,100
‫Dan saya melihat bahwa ini sebenarnya tidak benar.

297
00:15:20,100 --> 00:15:22,680
‫Kurung kurawal ini harus ada di sana.

298
00:15:22,680 --> 00:15:24,263
‫Jadi, sekarang, pengguna,

299
00:15:25,676 --> 00:15:26,843
‫resetPassword,

300
00:15:28,910 --> 00:15:32,830
‫dan kemudian tebasan lagi, dan akhirnya token.

301
00:15:32,830 --> 00:15:34,833
‫Oke, jadi, resetToken.

302
00:15:35,790 --> 00:15:36,623
‫Baiklah?

303
00:15:36,623 --> 00:15:38,780
‫Dan seperti yang telah kita diskusikan sebelumnya, dalam

304
00:15:38,780 --> 00:15:40,000
‫kuliah terakhir, di

305
00:15:40,000 --> 00:15:44,000
‫sini kita sebenarnya harus mengirim Token reset asli yang polos, dan bukan yang terenkripsi.

306
00:15:44,000 --> 00:15:44,833
‫Baiklah?

307
00:15:44,833 --> 00:15:46,170
‫Kami kemudian akan,

308
00:15:46,170 --> 00:15:49,810
‫pada langkah berikutnya, membandingkan token asli dengan yang dienkripsi.

309
00:15:49,810 --> 00:15:52,780
‫Jadi, sekali lagi, seperti yang kita bahas di video terakhir.

310
00:15:52,780 --> 00:15:56,657
‫Simpan di sini sekarang, dan itu adalah URL reset kami.

311
00:16:00,940 --> 00:16:04,490
‫Dan sekarang, berdasarkan URL ini, mari kita cepat membuat

312
00:16:04,490 --> 00:16:06,233
‫pesan di sini juga.

313
00:16:07,950 --> 00:16:11,113
‫Jadi, Lupa kata sandi Anda?

314
00:16:13,120 --> 00:16:17,720
‫Kirim permintaan PATCH dengan kata sandi dan kata sandi

315
00:16:18,900 --> 00:16:21,650
‫baru Anda. Konfirmasikan tentu saja,

316
00:16:24,380 --> 00:16:26,273
‫ke URL reset

317
00:16:30,850 --> 00:16:34,270
‫yang baru saja kita buat, oke?

318
00:16:34,270 --> 00:16:37,500
‫Jadi pada dasarnya, memberi pengguna beberapa instruksi di sini.

319
00:16:37,500 --> 00:16:39,373
‫Kemudian, di baris baru, kami

320
00:16:40,670 --> 00:16:44,053
‫juga mengatakan, jika Anda tidak lupa kata sandi Anda,

321
00:16:47,820 --> 00:16:49,610
‫abaikan email ini.

322
00:16:49,610 --> 00:16:51,690
‫Jadi itu semacam pesan umum, dan sekali

323
00:16:51,690 --> 00:16:54,320
‫lagi, saya yakin Anda telah melihatnya dalam beberapa cara

324
00:16:54,320 --> 00:16:55,963
‫atau yang lain, baiklah.

325
00:16:56,860 --> 00:16:59,900
‫Jadi sekarang, akhirnya, mengirim email, dan

326
00:16:59,900 --> 00:17:02,020
‫ingat bahwa sendEmail adalah

327
00:17:02,020 --> 00:17:03,640
‫fungsi asinkron.

328
00:17:03,640 --> 00:17:06,470
‫Jadi, oleh karena itu, kita perlu menunggunya di sini.

329
00:17:06,470 --> 00:17:07,303
‫Oke?

330
00:17:07,303 --> 00:17:09,693
‫Karena, tentu saja, itu akan mengembalikan Janji.

331
00:17:11,470 --> 00:17:14,850
‫Dan ingat sekarang bahwa fungsi sendEmail di sini

332
00:17:14,850 --> 00:17:17,490
‫mengambil objek dengan beberapa opsi.

333
00:17:17,490 --> 00:17:22,490
‫Jadi email adalah pengguna. email, kan?

334
00:17:23,730 --> 00:17:28,150
‫Atau kita juga bisa mengatakan, req. tubuh. surel.

335
00:17:28,150 --> 00:17:31,233
‫Jadi sebenarnya sama saja, kan?

336
00:17:32,900 --> 00:17:35,773
‫Kemudian subjek yang ingin

337
00:17:36,690 --> 00:17:41,363
‫kami sampaikan adalah, Token reset kata sandi Anda.

338
00:17:44,850 --> 00:17:48,540
‫Katakanlah langsung bahwa itu hanya berlaku selama

339
00:17:48,540 --> 00:17:52,290
‫10 menit, sehingga pengguna tahu bahwa dia harus bergegas.

340
00:17:52,290 --> 00:17:55,113
‫Oke, dan akhirnya, pesannya juga.

341
00:17:56,940 --> 00:17:57,773
‫Oke.

342
00:17:57,773 --> 00:18:00,080
‫Jadi, kami menunggu itu, dan

343
00:18:00,080 --> 00:18:04,330
‫kemudian setelah itu, mari kita juga mengirim, tentu saja, beberapa tanggapan.

344
00:18:04,330 --> 00:18:07,130
‫Oke, jadi selalu perlu ada tanggapan, jika

345
00:18:07,130 --> 00:18:08,860
‫tidak, seperti yang sudah

346
00:18:08,860 --> 00:18:11,970
‫Anda ketahui, siklus permintaan/tanggapan tidak akan pernah selesai.

347
00:18:11,970 --> 00:18:14,700
‫Jadi kami cukup mengirim kode

348
00:18:14,700 --> 00:18:18,720
‫200 dan kemudian pesan yang diformat dengan

349
00:18:19,670 --> 00:18:22,023
‫baik dengan status

350
00:18:25,640 --> 00:18:28,550
‫sukses, dan kemudian hanya pesan

351
00:18:28,550 --> 00:18:32,410
‫singkat yang mengatakan, Token terkirim ke email.

352
00:18:32,410 --> 00:18:33,243
‫Baiklah.

353
00:18:33,243 --> 00:18:37,490
‫Dan, tentu saja, kami tidak dapat mengirim token reset di sini, dengan

354
00:18:37,490 --> 00:18:40,970
‫berdekatan, kan, karena, setiap orang dapat dengan mudah mereset kata

355
00:18:40,970 --> 00:18:42,910
‫sandi siapa pun, dan mengambil

356
00:18:42,910 --> 00:18:45,440
‫alih akun apa pun yang mereka inginkan.

357
00:18:45,440 --> 00:18:47,740
‫Dan itulah seluruh alasan mengapa kami mengirimkannya

358
00:18:47,740 --> 00:18:49,940
‫ke alamat email, karena kami berasumsi

359
00:18:49,940 --> 00:18:51,800
‫bahwa email adalah tempat yang

360
00:18:51,800 --> 00:18:54,187
‫aman, yang hanya dapat diakses oleh pengguna.

361
00:18:54,187 --> 00:18:55,020
‫Baiklah.

362
00:18:56,990 --> 00:19:00,170
‫Whoo, jadi, video ini, lagi-lagi berjalan cukup lama, tapi

363
00:19:00,170 --> 00:19:01,620
‫kita masih belum selesai.

364
00:19:01,620 --> 00:19:04,200
‫Kami hampir selesai, tetapi tidak sepenuhnya,

365
00:19:04,200 --> 00:19:06,590
‫karena mungkin terjadi kesalahan,

366
00:19:06,590 --> 00:19:10,560
‫menggunakan sendEmail ini, oke, dan dalam hal ini, kami,

367
00:19:10,560 --> 00:19:14,100
‫tentu saja, ingin mengirim pesan kesalahan ke klien.

368
00:19:14,100 --> 00:19:16,720
‫Namun dalam kasus ini, kita sebenarnya perlu melakukan

369
00:19:16,720 --> 00:19:18,980
‫lebih dari sekadar mengirim pesan kesalahan.

370
00:19:18,980 --> 00:19:22,707
‫Pada dasarnya kita perlu mengatur kembali token reset kata

371
00:19:22,707 --> 00:19:26,660
‫sandi dan reset kata sandi kedaluwarsa yang telah kita tentukan, oke?

372
00:19:26,660 --> 00:19:29,140
‫Jadi saat ini tidak cukup hanya

373
00:19:29,140 --> 00:19:31,340
‫dengan menangkap kesalahan dan

374
00:19:31,340 --> 00:19:34,100
‫mengirimkannya ke middleware penanganan kesalahan global kami.

375
00:19:34,100 --> 00:19:36,980
‫Tapi sebaliknya kita hanya perlu menambahkan

376
00:19:36,980 --> 00:19:39,660
‫blok try-catch di sini.

377
00:19:39,660 --> 00:19:42,290
‫Jadi sekali lagi, karena kami

378
00:19:42,290 --> 00:19:45,363
‫sebenarnya ingin melakukan lebih dari sekadar mengirim kesalahan

379
00:19:46,850 --> 00:19:49,633
‫ke klien, jadi pada dasarnya kami mencoba

380
00:19:50,950 --> 00:19:53,763
‫melakukan ini, benar, tetapi jika ada kesalahan,

381
00:19:54,660 --> 00:19:57,630
‫tentu saja, blok ini di sini dijalankan.

382
00:19:57,630 --> 00:19:58,463
‫Baiklah?

383
00:19:58,463 --> 00:20:01,380
‫Jadi apa yang ingin kami lakukan dalam

384
00:20:01,380 --> 00:20:04,160
‫kasus itu, pada dasarnya kami ingin,

385
00:20:04,160 --> 00:20:08,140
‫seperti yang saya katakan, mengatur ulang token dan properti kedaluwarsa.

386
00:20:08,140 --> 00:20:09,620
‫Oke.

387
00:20:09,620 --> 00:20:11,850
‫Jadi, passwordResetToken,

388
00:20:15,360 --> 00:20:18,950
‫dan setel ke undefined, oke.

389
00:20:18,950 --> 00:20:22,053
‫Dan hal yang sama untuk passwordResetExpires.

390
00:20:24,670 --> 00:20:25,503
‫Oke.

391
00:20:25,503 --> 00:20:27,350
‫Dan kemudian, tentu saja,

392
00:20:27,350 --> 00:20:30,830
‫seperti sebelumnya, ini hanya mengubah data, tetapi tidak benar-benar menyimpannya.

393
00:20:30,830 --> 00:20:33,693
‫Jadi mari kita tambahkan, ambil yang

394
00:20:35,560 --> 00:20:39,730
‫ini, dan pada dasarnya menyimpan data dalam kasus ini.

395
00:20:39,730 --> 00:20:41,750
‫Oke, dan kemudian hanya untuk

396
00:20:41,750 --> 00:20:45,140
‫menyelesaikan, tentu saja, kami kembali dengan kesalahan ke

397
00:20:45,140 --> 00:20:46,620
‫middleware berikutnya.

398
00:20:46,620 --> 00:20:48,223
‫Jadi

399
00:20:50,970 --> 00:20:55,373
‫newAppError, Terjadi kesalahan saat mengirim email.

400
00:20:57,940 --> 00:20:59,333
‫Coba lagi nanti.

401
00:21:00,220 --> 00:21:03,700
‫Dan dalam hal ini, kode kesalahan sebenarnya bisa menjadi 500.

402
00:21:03,700 --> 00:21:06,980
‫Jadi ini benar-benar, seperti kesalahan yang terjadi di

403
00:21:06,980 --> 00:21:09,930
‫server, dan itu harus berupa lima

404
00:21:09,930 --> 00:21:12,893
‫kode, dan 500 hanya, seperti, kode standar.

405
00:21:13,740 --> 00:21:15,160
‫Baiklah.

406
00:21:15,160 --> 00:21:20,160
‫Jadi, sekarang mari kita lanjutkan dan coba ini lagi, oke.

407
00:21:20,830 --> 00:21:25,130
‫Jadi ini cukup panjang lagi, tapi, yah, kita

408
00:21:25,130 --> 00:21:27,200
‫harus melakukannya, kan?

409
00:21:27,200 --> 00:21:31,173
‫Jadi, lupa kata sandi, dengan email ini, mari kita periksa.

410
00:21:32,260 --> 00:21:34,270
‫Jadi ini mungkin tidak

411
00:21:34,270 --> 00:21:36,400
‫memakan waktu lama, karena mengirim email,

412
00:21:36,400 --> 00:21:40,360
‫tetapi sebenarnya itu berhasil sekarang, butuh waktu lima detik, tetapi

413
00:21:40,360 --> 00:21:42,840
‫kami melihat Token dikirim ke email.

414
00:21:42,840 --> 00:21:45,770
‫jadi, seperti yang kita ketahui, karena kita menggunakan Mailtrap, sebenarnya

415
00:21:45,770 --> 00:21:49,810
‫email ini tidak dikirim ke hello@jones. io tetapi

416
00:21:49,810 --> 00:21:53,010
‫emailnya sekarang harus terjebak

417
00:21:53,010 --> 00:21:55,940
‫di dalam Mailtrap.

418
00:21:55,940 --> 00:21:59,003
‫Dan, memang, di sini di sisi kiri, sekarang muncul.

419
00:21:59,890 --> 00:22:01,170
‫Baiklah.

420
00:22:01,170 --> 00:22:04,440
‫Jadi, itulah email yang kami tentukan dan di sini

421
00:22:04,440 --> 00:22:06,467
‫kami mendapatkan URL bagus kami.

422
00:22:07,960 --> 00:22:11,980
‫Oke, jadi yang kita buat dengan protokol, host,

423
00:22:11,980 --> 00:22:15,070
‫dan kemudian juga dengan token.

424
00:22:15,070 --> 00:22:17,210
‫Jadi mari kita lihat apakah

425
00:22:17,210 --> 00:22:18,910
‫ini benar-benar

426
00:22:18,910 --> 00:22:20,873
‫token biasa kita, jadi

427
00:22:22,130 --> 00:22:26,690
‫berakhiran 88df, dan memang, kita telah meresetToken di sini, 88df.

428
00:22:26,690 --> 00:22:29,050
‫Dan sekarang di database, kita

429
00:22:29,050 --> 00:22:31,890
‫harus memiliki token yang diakhiri dengan 1111.

430
00:22:31,890 --> 00:22:34,883
‫Jadi, mari kita pastikan bahwa,

431
00:22:35,780 --> 00:22:40,780
‫di sini, di Kompas, muat ulang, dan, memang, ini dia, oke?

432
00:22:41,470 --> 00:22:45,260
‫Dan sekali lagi, ini dalam 10 menit dari sekarang.

433
00:22:45,260 --> 00:22:47,910
‫Bagus, jadi kami menyelesaikan bagian itu.

434
00:22:47,910 --> 00:22:50,290
‫Selanjutnya di video selanjutnya kita

435
00:22:50,290 --> 00:22:52,320
‫sebenarnya akan mereset

436
00:22:52,320 --> 00:22:54,590
‫password, tentunya berdasarkan password baru

437
00:22:54,590 --> 00:22:58,030
‫yang dikirimkan pengguna dengan permintaan reset password.

438
00:22:58,030 --> 00:22:58,993
‫Jadi, sampai jumpa disana.

