﻿1
00:00:00,960 --> 00:00:02,570
‫Instructor: Entonces, ahora debemos

2
00:00:02,570 --> 00:00:06,600
‫enviar el token de restablecimiento de contraseña por correo electrónico al usuario.

3
00:00:06,600 --> 00:00:08,860
‫Entonces, en esta conferencia, aprenderemos

4
00:00:08,860 --> 00:00:12,140
‫cómo enviar correos electrónicos usando una solución muy

5
00:00:12,140 --> 00:00:13,630
‫popular llamada Nodemailer.

6
00:00:15,154 --> 00:00:17,600
‫Pero antes de hacer eso, en realidad

7
00:00:17,600 --> 00:00:20,840
‫quería mostrarte el efecto de no tener esta opción aquí,

8
00:00:20,840 --> 00:00:23,540
‫porque en realidad nunca te lo mostré antes.

9
00:00:23,540 --> 00:00:26,543
‫Así que cortémoslo aquí, inténtelo ahora, nuevamente, y

10
00:00:28,910 --> 00:00:31,720
‫ahora verá todos estos errores como por

11
00:00:31,720 --> 00:00:33,890
‫favor confirme su contraseña.

12
00:00:33,890 --> 00:00:36,010
‫Y, en realidad, debería haber

13
00:00:36,010 --> 00:00:39,340
‫más, pero, bueno, este es ahora el primero que obtienes.

14
00:00:39,340 --> 00:00:41,400
‫Básicamente, porque no tenemos ningún valor

15
00:00:41,400 --> 00:00:43,650
‫en el campo de confirmación de contraseña.

16
00:00:43,650 --> 00:00:44,483
‫¿Okey?

17
00:00:44,483 --> 00:00:46,600
‫Y, de nuevo, eso se debe a

18
00:00:46,600 --> 00:00:49,330
‫la validación y, de nuevo, podemos, por supuesto, desactivarlo

19
00:00:49,330 --> 00:00:51,083
‫fácilmente con esta opción.

20
00:00:53,430 --> 00:00:56,600
‫Pero de todos modos, ahora creemos una función de controlador de

21
00:00:56,600 --> 00:00:59,580
‫correo electrónico que luego podamos usar en toda nuestra aplicación.

22
00:00:59,580 --> 00:01:00,860
‫Así que lo haré

23
00:01:00,860 --> 00:01:02,673
‫aquí mismo en la carpeta Utilidades,

24
00:01:04,210 --> 00:01:08,440
‫nuevamente, y simplemente lo llamaré correo electrónico. js.

25
00:01:08,440 --> 00:01:09,650
‫¿Está bien?

26
00:01:09,650 --> 00:01:11,410
‫Y antes de hacer

27
00:01:11,410 --> 00:01:14,240
‫cualquier otra cosa, instalemos el paquete Nodemailer.

28
00:01:14,240 --> 00:01:16,120
‫Ese es el paquete que mencioné al

29
00:01:16,120 --> 00:01:17,390
‫principio, que usaremos

30
00:01:17,390 --> 00:01:20,723
‫para enviar correos electrónicos usando Node. js.

31
00:01:23,130 --> 00:01:27,620
‫Entonces, como siempre, npm install nodemailer.

32
00:01:34,170 --> 00:01:35,123
‫Y aquí.

33
00:01:42,674 --> 00:01:46,423
‫Muy bien, y ahora creemos esa función aquí.

34
00:01:49,500 --> 00:01:51,113
‫Correo electrónico constante, está

35
00:01:52,880 --> 00:01:54,350
‫bien, y

36
00:01:54,350 --> 00:01:58,060
‫luego aquí, básicamente vamos a pasar algunas opciones.

37
00:01:58,060 --> 00:02:01,090
‫Entonces, la dirección de correo electrónico a la que queremos enviar un

38
00:02:01,090 --> 00:02:03,780
‫correo electrónico, la línea de asunto, el contenido del correo

39
00:02:03,780 --> 00:02:05,803
‫electrónico y tal vez algunas otras cosas.

40
00:02:07,625 --> 00:02:08,780
‫Está bien.

41
00:02:08,780 --> 00:02:11,180
‫Entonces, ahora debemos seguir tres

42
00:02:11,180 --> 00:02:13,950
‫pasos para enviar correos electrónicos con Nodemailer.

43
00:02:15,120 --> 00:02:18,783
‫Entonces, primero, necesitamos crear un transportador.

44
00:02:23,950 --> 00:02:24,963
‫Luego,

45
00:02:27,340 --> 00:02:31,777
‫en segundo lugar, tenemos que definir las opciones de correo

46
00:02:35,330 --> 00:02:36,373
‫electrónico, básicamente, y

47
00:02:37,930 --> 00:02:41,820
‫luego, al final, enviar el correo electrónico con Nodemailer.

48
00:02:41,820 --> 00:02:42,960
‫¿Okey?

49
00:02:42,960 --> 00:02:46,260
‫Entonces, el transportador que hicimos en el primer paso

50
00:02:46,260 --> 00:02:50,790
‫aquí, es básicamente un servicio que realmente enviará el correo electrónico, porque no

51
00:02:50,790 --> 00:02:53,610
‫es un nodo. js que realmente

52
00:02:53,610 --> 00:02:55,220
‫enviará el correo electrónico.

53
00:02:55,220 --> 00:02:57,720
‫Es solo un servicio que definimos aquí.

54
00:02:57,720 --> 00:03:00,340
‫Algo como Gmail, por ejemplo.

55
00:03:00,340 --> 00:03:02,270
‫Ahora, Gmail no es realmente el

56
00:03:02,270 --> 00:03:03,370
‫servicio que

57
00:03:03,370 --> 00:03:05,760
‫vamos a usar, pero permítanme mostrarles rápidamente

58
00:03:05,760 --> 00:03:08,350
‫cómo funciona con Gmail, porque sé que muchas

59
00:03:08,350 --> 00:03:10,810
‫personas estarán interesadas en esto, ¿de acuerdo?

60
00:03:10,810 --> 00:03:15,120
‫Entonces, de todos modos, siempre necesitamos crear un transportador, y eso siempre

61
00:03:15,120 --> 00:03:16,260
‫es lo

62
00:03:16,260 --> 00:03:18,210
‫mismo, sin importar qué servicio usemos.

63
00:03:20,070 --> 00:03:22,410
‫Entonces el transportador será

64
00:03:22,410 --> 00:03:24,577
‫nodemailer. createTransport y

65
00:03:28,660 --> 00:03:31,550
‫luego, por supuesto, necesitamos algunas opciones allí.

66
00:03:31,550 --> 00:03:32,920
‫¿Está bien?

67
00:03:32,920 --> 00:03:35,820
‫Entonces podemos especificar el servicio y podemos

68
00:03:37,620 --> 00:03:40,360
‫decir que queremos usar Gmail.

69
00:03:40,360 --> 00:03:42,110
‫Así que, así.

70
00:03:42,110 --> 00:03:44,530
‫Y hay un par de servicios

71
00:03:44,530 --> 00:03:47,260
‫bien conocidos con los que Nodemailer sabe cómo manejar,

72
00:03:47,260 --> 00:03:49,870
‫por lo que no tenemos que configurarlos manualmente.

73
00:03:49,870 --> 00:03:52,660
‫Por eso, Gmail es solo uno de ellos.

74
00:03:52,660 --> 00:03:56,863
‫Pero también está Yahoo, Hotmail o muchos otros, ¿de acuerdo?

75
00:03:57,760 --> 00:03:58,980
‫Así que

76
00:03:58,980 --> 00:04:03,020
‫ese es el servicio, y luego también necesitamos especificar la propiedad

77
00:04:03,020 --> 00:04:04,783
‫auth, básicamente para la autenticación.

78
00:04:06,150 --> 00:04:08,730
‫Entonces necesitamos un usuario y una contraseña.

79
00:04:08,730 --> 00:04:10,380
‫Y así, como antes, guardamos

80
00:04:10,380 --> 00:04:14,253
‫ese tipo de cosas en nuestra configuración. n archivo.

81
00:04:15,840 --> 00:04:16,673
‫Está bien.

82
00:04:17,930 --> 00:04:18,963
‫Entonces, correo

83
00:04:21,090 --> 00:04:22,253
‫electrónico, es un

84
00:04:23,500 --> 00:04:26,700
‫nombre de usuario, y ahora no voy a usar

85
00:04:26,700 --> 00:04:28,963
‫una dirección de Gmail real aquí porque,

86
00:04:29,910 --> 00:04:34,140
‫nuevamente, no estamos usando Gmail, pero solo como un ejemplo aquí, está bien.

87
00:04:34,140 --> 00:04:36,910
‫Tu contraseña.

88
00:04:36,910 --> 00:04:38,350
‫Está bien.

89
00:04:38,350 --> 00:04:40,480
‫Así que aquí hemos terminado,

90
00:04:40,480 --> 00:04:41,350
‫digamos,

91
00:04:43,090 --> 00:04:44,830
‫procesar punto final punto

92
00:04:47,414 --> 00:04:48,581
‫EMAIL_USERNAME el

93
00:04:53,780 --> 00:04:56,113
‫proceso de contraseña punto final

94
00:04:58,310 --> 00:04:59,800
‫punto EMAIL_PASSWORD y

95
00:05:02,650 --> 00:05:04,723
‫espero haberlo escrito correctamente.

96
00:05:05,580 --> 00:05:06,413
‫¿Okey?

97
00:05:06,413 --> 00:05:07,970
‫Y esta es

98
00:05:07,970 --> 00:05:10,610
‫la configuración para el transporte en Nodemailer.

99
00:05:10,610 --> 00:05:12,400
‫Luego, en su cuenta de

100
00:05:12,400 --> 00:05:14,160
‫Gmail, tendrá que

101
00:05:14,160 --> 00:05:17,346
‫activar algo llamado la opción de aplicación menos segura.

102
00:05:17,346 --> 00:05:18,896
‫Déjame escribir eso aquí.

103
00:05:27,609 --> 00:05:29,640
‫Y nuevamente, no lo voy a

104
00:05:29,640 --> 00:05:31,020
‫hacer aquí, pero

105
00:05:31,020 --> 00:05:33,160
‫sé que mucha gente realmente querrá usarlo.

106
00:05:33,160 --> 00:05:35,710
‫Y la razón por la que no usamos

107
00:05:35,710 --> 00:05:37,200
‫Gmail en esta aplicación es

108
00:05:37,200 --> 00:05:40,170
‫porque Gmail no es una buena idea para una

109
00:05:40,170 --> 00:05:41,510
‫aplicación de producción.

110
00:05:41,510 --> 00:05:44,170
‫Y eso es básicamente lo que estamos tratando de construir aquí.

111
00:05:44,170 --> 00:05:45,003
‫¿Okey?

112
00:05:45,003 --> 00:05:47,600
‫Entonces, al usar Gmail para este tipo

113
00:05:47,600 --> 00:05:50,670
‫de cosas, solo puede enviar 500 correos electrónicos por

114
00:05:50,670 --> 00:05:53,520
‫día y, además, probablemente se lo marcará muy

115
00:05:53,520 --> 00:05:57,410
‫rápidamente como spammer y, a partir de ahí, solo irá cuesta abajo.

116
00:05:57,410 --> 00:05:58,330
‫¿Está bien?

117
00:05:58,330 --> 00:06:00,710
‫Entonces, a menos que sea como una aplicación

118
00:06:00,710 --> 00:06:02,780
‫privada, y solo te envíes correos electrónicos

119
00:06:02,780 --> 00:06:04,470
‫a ti mismo, o, como,

120
00:06:04,470 --> 00:06:07,090
‫a 10 amigos, bueno, entonces deberías usar otro servicio.

121
00:06:07,090 --> 00:06:10,680
‫Y algunos conocidos son SendGrid y Mailgun.

122
00:06:10,680 --> 00:06:13,740
‫Y, de hecho, usaremos SendGrid un poco más adelante

123
00:06:13,740 --> 00:06:15,180
‫en este curso.

124
00:06:15,180 --> 00:06:17,400
‫Ahora, lo que vamos a hacer

125
00:06:17,400 --> 00:06:19,920
‫ahora es utilizar un servicio de desarrollo

126
00:06:19,920 --> 00:06:23,740
‫especial, que básicamente falsifica para enviar correos electrónicos a direcciones reales.

127
00:06:23,740 --> 00:06:26,660
‫Pero, en realidad, estos correos electrónicos terminan atrapados en una

128
00:06:26,660 --> 00:06:29,920
‫bandeja de entrada de desarrollo, por lo que luego podemos ver cómo

129
00:06:29,920 --> 00:06:32,320
‫se verán más adelante en la producción.

130
00:06:32,320 --> 00:06:33,270
‫¿Está bien?

131
00:06:33,270 --> 00:06:35,700
‫Entonces, ese servicio se llama Mailtrap, y

132
00:06:35,700 --> 00:06:37,893
‫ahora vamos a registrarnos para eso.

133
00:06:41,190 --> 00:06:42,023
‫Entonces.

134
00:06:43,500 --> 00:06:45,883
‫Mailtrap. io, ¿de

135
00:06:47,810 --> 00:06:48,643
‫acuerdo?

136
00:06:48,643 --> 00:06:51,050
‫Entonces, y como digo, pruebas de correo electrónico seguras para

137
00:06:51,050 --> 00:06:52,940
‫la puesta en escena y el desarrollo.

138
00:06:52,940 --> 00:06:54,280
‫Entonces, básicamente, con

139
00:06:54,280 --> 00:06:57,410
‫este servicio, puede falsificar para enviar correos electrónicos a los

140
00:06:57,410 --> 00:07:00,230
‫clientes, pero estos correos electrónicos nunca llegarán a estos

141
00:07:00,230 --> 00:07:03,670
‫clientes y, en cambio, quedarán atrapados en su Mailtrap, ¿de acuerdo?

142
00:07:03,670 --> 00:07:05,660
‫Y de esa manera

143
00:07:05,660 --> 00:07:09,150
‫no puede enviar accidentalmente algunos correos electrónicos de desarrollo a

144
00:07:09,150 --> 00:07:11,540
‫todos sus clientes o usuarios, está bien.

145
00:07:11,540 --> 00:07:13,450
‫Así que anímate y regístrate ahora.

146
00:07:13,450 --> 00:07:15,430
‫Yo, por supuesto, ya tengo mi cuenta, por

147
00:07:15,430 --> 00:07:17,040
‫lo que simplemente iniciaré sesión ahora.

148
00:07:17,040 --> 00:07:19,390
‫Nos vemos en un segundo, después de

149
00:07:19,390 --> 00:07:21,600
‫haber creado su cuenta gratuita.

150
00:07:21,600 --> 00:07:24,350
‫Muy bien, después de crear su

151
00:07:24,350 --> 00:07:27,290
‫cuenta, probablemente se verá un poco así.

152
00:07:27,290 --> 00:07:29,630
‫Ahora, no tendrá ninguna bandeja de entrada por

153
00:07:29,630 --> 00:07:31,810
‫ahora, así que creemos una nueva, con el

154
00:07:31,810 --> 00:07:32,970
‫nombre de natours.

155
00:07:32,970 --> 00:07:36,200
‫Entonces, ya tengo uno, pero simplemente cree uno nuevo aquí, con el

156
00:07:36,200 --> 00:07:39,260
‫nombre de natours, y luego presione Crear Bandeja de entrada.

157
00:07:39,260 --> 00:07:40,093
‫¿Está bien?

158
00:07:40,093 --> 00:07:41,520
‫Entonces podemos abrirlo,

159
00:07:41,520 --> 00:07:44,280
‫y verá que no tenemos correo electrónico en

160
00:07:44,280 --> 00:07:45,950
‫este momento, pero lo que

161
00:07:45,950 --> 00:07:48,170
‫importa por ahora son estas credenciales aquí.

162
00:07:48,170 --> 00:07:50,310
‫Como puede ver, tenemos nuestro host aquí,

163
00:07:50,310 --> 00:07:53,120
‫tenemos el puerto, el nombre de usuario y la contraseña.

164
00:07:53,120 --> 00:07:54,990
‫Y eso es lo que

165
00:07:54,990 --> 00:07:57,580
‫vamos a especificar ahora en nuestro transporte en Nodemailer.

166
00:07:57,580 --> 00:07:58,413
‫¿Está bien?

167
00:07:58,413 --> 00:08:00,810
‫Así que comencemos con el host, bueno,

168
00:08:00,810 --> 00:08:02,060
‫en realidad, con

169
00:08:02,060 --> 00:08:04,320
‫el nombre de usuario, así que estos

170
00:08:04,320 --> 00:08:07,933
‫dos, solo necesito copiarlos, así que copiemos a nuestro archivo de

171
00:08:09,100 --> 00:08:11,323
‫configuración, entonces ese es el nombre

172
00:08:13,220 --> 00:08:14,723
‫de usuario, luego esa

173
00:08:18,620 --> 00:08:21,813
‫es la contraseña, y ahora también necesitamos especificar el host.

174
00:08:28,580 --> 00:08:31,830
‫Bien, y eso es porque Mailtrap no

175
00:08:31,830 --> 00:08:35,493
‫es uno de estos servicios predefinidos que viene con Nodemailer.

176
00:08:39,720 --> 00:08:40,553
‫Está bien.

177
00:08:44,800 --> 00:08:46,433
‫El puerto es 25.

178
00:08:47,780 --> 00:08:49,660
‫Así que déjelo guardar,

179
00:08:49,660 --> 00:08:53,390
‫y luego aquí, eliminemos esto, y lo que necesito

180
00:08:53,390 --> 00:08:56,690
‫especificar en su lugar es el host, el

181
00:08:57,730 --> 00:08:58,803
‫correo

182
00:09:00,040 --> 00:09:01,460
‫electrónico, el host

183
00:09:01,460 --> 00:09:03,430
‫y, por supuesto, el puerto.

184
00:09:03,430 --> 00:09:05,773
‫Entonces, todo lo que acabamos de guardar antes.

185
00:09:10,800 --> 00:09:12,950
‫De acuerdo, entonces la autenticación aquí es

186
00:09:12,950 --> 00:09:14,323
‫exactamente la misma.

187
00:09:15,790 --> 00:09:17,643
‫Eliminemos esto también y

188
00:09:19,888 --> 00:09:22,200
‫pasemos al paso número dos.

189
00:09:22,200 --> 00:09:24,913
‫Básicamente, definiendo algunas opciones para nuestro correo electrónico.

190
00:09:29,440 --> 00:09:31,700
‫Está bien, y podríamos, por supuesto,

191
00:09:31,700 --> 00:09:34,320
‫hacer los pasos dos y tres al mismo tiempo,

192
00:09:34,320 --> 00:09:36,970
‫pero me gusta simplemente preferir estas opciones aquí primero.

193
00:09:37,810 --> 00:09:39,910
‫Bien, y aquí especificamos de dónde

194
00:09:39,910 --> 00:09:41,603
‫viene el correo electrónico,

195
00:09:42,660 --> 00:09:43,713
‫el nombre

196
00:09:45,890 --> 00:09:48,963
‫y luego la dirección de correo electrónico como esta.

197
00:09:52,800 --> 00:09:55,453
‫A continuación, necesitamos la dirección del

198
00:09:57,500 --> 00:10:01,153
‫destinatario, y esa, la especificaré como una opción, ¿de

199
00:10:03,200 --> 00:10:04,033
‫acuerdo?

200
00:10:04,033 --> 00:10:06,560
‫Básicamente, como argumento para esta función.

201
00:10:06,560 --> 00:10:08,650
‫Entonces, este objeto de opciones

202
00:10:08,650 --> 00:10:11,173
‫aquí, es el que pasamos a la función.

203
00:10:12,110 --> 00:10:13,370
‫Está bien.

204
00:10:13,370 --> 00:10:17,263
‫Entonces, en realidad, lo mismo para el tema y para el texto.

205
00:10:18,990 --> 00:10:20,593
‫Dupliquemos esto aquí,

206
00:10:26,250 --> 00:10:28,170
‫así que el asunto y

207
00:10:29,300 --> 00:10:31,720
‫luego solo especificamos la propiedad del texto,

208
00:10:31,720 --> 00:10:34,793
‫y esa, en las opciones, solo lo llamo mensaje.

209
00:10:35,790 --> 00:10:38,070
‫Muy bien, esta es básicamente la versión

210
00:10:38,070 --> 00:10:39,950
‫de texto del correo electrónico.

211
00:10:39,950 --> 00:10:44,220
‫Pero luego también podemos especificar la propiedad HTML.

212
00:10:44,220 --> 00:10:48,220
‫Bien, y ahora podríamos convertir este mensaje a HTML.

213
00:10:48,220 --> 00:10:50,460
‫Y luego, haremos eso, pero por

214
00:10:50,460 --> 00:10:54,780
‫ahora, mantengamos las cosas simples y no especifiquemos el HTML aquí, en absoluto.

215
00:10:54,780 --> 00:10:55,613
‫¿Okey?

216
00:10:55,613 --> 00:10:57,993
‫Así que simplemente déjelo en el texto.

217
00:10:59,320 --> 00:11:00,153
‫¡Okey!

218
00:11:00,153 --> 00:11:01,773
‫Y luego, finalmente,

219
00:11:03,050 --> 00:11:06,723
‫al final, transporter, así que ese es el objeto

220
00:11:06,723 --> 00:11:09,440
‫transporter que creamos aquí al principio, y

221
00:11:09,440 --> 00:11:11,890
‫en eso, podemos llamar a sendMail

222
00:11:14,470 --> 00:11:18,983
‫y en eso tenemos que pasar nuestras opciones de correo, ¿de acuerdo?

223
00:11:19,900 --> 00:11:22,640
‫Y ahora esto realmente devuelve una Promesa.

224
00:11:22,640 --> 00:11:25,890
‫Bien, de nuevo, esta es una función asincrónica,

225
00:11:25,890 --> 00:11:29,480
‫y como no queremos trabajar directamente con Promises, usemos

226
00:11:29,480 --> 00:11:30,933
‫async / await.

227
00:11:32,890 --> 00:11:33,723
‫Está bien.

228
00:11:34,770 --> 00:11:37,450
‫Así que declarando esto como una función

229
00:11:37,450 --> 00:11:39,023
‫asincrónica y listo.

230
00:11:40,030 --> 00:11:41,070
‫Está bien.

231
00:11:41,070 --> 00:11:43,250
‫No queremos almacenar ningún resultado aquí,

232
00:11:43,250 --> 00:11:46,423
‫lo que podríamos hacer, pero no estoy realmente interesado en eso.

233
00:11:47,940 --> 00:11:51,930
‫Bien, y ahora simplemente exportémoslo como predeterminado

234
00:11:51,930 --> 00:11:54,263
‫desde este módulo.

235
00:11:57,990 --> 00:11:59,360
‫¡Está bien, se ve bien!

236
00:11:59,360 --> 00:12:02,890
‫Ahora sigamos adelante e intentemos esto.

237
00:12:02,890 --> 00:12:07,050
‫Y para empezar, tenemos que importarlo aquí, por supuesto.

238
00:12:07,050 --> 00:12:09,003
‫Así que dupliquemos esto aquí,

239
00:12:13,270 --> 00:12:14,370
‫entonces esto

240
00:12:14,370 --> 00:12:19,163
‫es correo electrónico, y creo que la función se llama enviar correo electrónico.

241
00:12:21,573 --> 00:12:22,406
‫Bueno.

242
00:12:22,406 --> 00:12:26,513
‫Así que volvamos a nuestra función de middleware aquí, y comencemos

243
00:12:28,540 --> 00:12:31,397
‫por definir la URL de restablecimiento.

244
00:12:33,890 --> 00:12:37,810
‫Entonces, idealmente, el usuario hará clic en este correo electrónico

245
00:12:37,810 --> 00:12:41,240
‫y podrá realizar la solicitud desde allí.

246
00:12:41,240 --> 00:12:42,500
‫Y eso funcionará

247
00:12:42,500 --> 00:12:44,650
‫más adelante cuando implementemos nuestro sitio web

248
00:12:44,650 --> 00:12:48,170
‫dinámico, pero aún así, ahora queremos crear esta URL aquí, para que

249
00:12:48,170 --> 00:12:50,350
‫el usuario pueda simplemente copiarla, para que

250
00:12:50,350 --> 00:12:52,433
‫sea más fácil hacer esta solicitud.

251
00:12:53,720 --> 00:12:56,130
‫Bien, básicamente necesitamos recrear

252
00:12:57,350 --> 00:13:00,750
‫esta estructura de URL que tenemos aquí.

253
00:13:00,750 --> 00:13:02,627
‫Así que este es para la

254
00:13:02,627 --> 00:13:04,227
‫contraseña olvidada y guardémoslo aquí.

255
00:13:10,670 --> 00:13:14,910
‫Entonces, olvidé la contraseña, y ahora la URL que estamos creando

256
00:13:14,910 --> 00:13:17,820
‫es en realidad para restablecer la contraseña.

257
00:13:17,820 --> 00:13:21,340
‫Entonces, recuerde, ya lo implementamos antes.

258
00:13:21,340 --> 00:13:22,173
‫Bueno.

259
00:13:22,173 --> 00:13:24,020
‫Sigamos adelante y

260
00:13:27,760 --> 00:13:31,750
‫copiemos aquí, así que restablezca la contraseña, ¿de acuerdo?

261
00:13:31,750 --> 00:13:33,940
‫Y eso tomará el token

262
00:13:33,940 --> 00:13:35,540
‫como parámetro.

263
00:13:35,540 --> 00:13:39,120
‫De acuerdo, pongamos aquí cualquier ficha aleatoria por ahora.

264
00:13:39,120 --> 00:13:40,563
‫Entonces no importa en absoluto.

265
00:13:41,610 --> 00:13:42,860
‫Déjame

266
00:13:45,150 --> 00:13:50,150
‫guardarlo aquí, como restablecer contraseña.

267
00:13:50,360 --> 00:13:51,193
‫Bueno.

268
00:13:51,193 --> 00:13:53,970
‫Y además, no es GET, tampoco es POST,

269
00:13:53,970 --> 00:13:56,320
‫pero es PATCH, porque el resultado de

270
00:13:56,320 --> 00:13:59,490
‫esto será la modificación de la propiedad de la contraseña

271
00:13:59,490 --> 00:14:01,560
‫en el documento del usuario.

272
00:14:01,560 --> 00:14:05,470
‫Entonces, PATCH es el mejor en realidad, ¿de acuerdo?

273
00:14:05,470 --> 00:14:09,023
‫Así que cambiemos rápidamente nuestra implementación de ruta para esto.

274
00:14:10,720 --> 00:14:14,410
‫Entonces, está aquí en userRoute, por lo que

275
00:14:14,410 --> 00:14:17,480
‫no es POST, es PATCH,

276
00:14:17,480 --> 00:14:20,710
‫y también queremos especificar un parámetro.

277
00:14:20,710 --> 00:14:22,330
‫Entonces, recuerde cómo lo hacemos.

278
00:14:22,330 --> 00:14:24,030
‫Así que es como aquí abajo.

279
00:14:24,030 --> 00:14:26,960
‫Entonces, otra barra, luego dos puntos, y luego

280
00:14:26,960 --> 00:14:29,593
‫el nombre del parámetro, que será token.

281
00:14:31,390 --> 00:14:32,990
‫Bien, construyamos esto

282
00:14:32,990 --> 00:14:34,870
‫ahora, comenzando con el protocolo.

283
00:14:34,870 --> 00:14:38,340
‫Entonces, HTTP o HTTPS, ¿de acuerdo?

284
00:14:38,340 --> 00:14:42,283
‫Y básicamente obtendremos esos datos de nuestra solicitud.

285
00:14:43,180 --> 00:14:45,720
‫Entonces, eso se almacena en el protocolo

286
00:14:47,250 --> 00:14:51,750
‫de puntos de solicitud, luego en dos puntos, y luego en el host, ¿de acuerdo?

287
00:14:51,750 --> 00:14:54,590
‫Así que básicamente estamos preparando este aquí para

288
00:14:54,590 --> 00:14:57,260
‫trabajar tanto en desarrollo como en producción.

289
00:14:57,260 --> 00:15:00,630
‫Entonces, solicite dot get y luego

290
00:15:00,630 --> 00:15:01,513
‫host.

291
00:15:02,760 --> 00:15:04,950
‫De acuerdo, así es como obtenemos el

292
00:15:04,950 --> 00:15:09,100
‫host, y luego api slash slash versión uno, y supongo que no es

293
00:15:09,100 --> 00:15:11,860
‫ideal para definir un nivel codificado como este,

294
00:15:11,860 --> 00:15:13,170
‫pero nuevamente, esto

295
00:15:13,170 --> 00:15:15,260
‫es algo que vamos a arreglar

296
00:15:15,260 --> 00:15:17,080
‫un poco más tarde. ¿okey?

297
00:15:17,080 --> 00:15:20,100
‫Y veo que esto en realidad no es correcto.

298
00:15:20,100 --> 00:15:22,680
‫Estos tirantes deberían estar ahí.

299
00:15:22,680 --> 00:15:24,263
‫Entonces, ahora, usuarios,

300
00:15:25,676 --> 00:15:26,843
‫resetPassword,

301
00:15:28,910 --> 00:15:32,830
‫y luego otra barra, y finalmente el token.

302
00:15:32,830 --> 00:15:34,833
‫Bien, entonces, resetToken.

303
00:15:35,790 --> 00:15:36,623
‫¿Está bien?

304
00:15:36,623 --> 00:15:38,780
‫Y como discutimos antes, en la

305
00:15:38,780 --> 00:15:40,000
‫última conferencia, aquí

306
00:15:40,000 --> 00:15:44,000
‫tenemos que enviar el resetToken original y simple, y no el cifrado.

307
00:15:44,000 --> 00:15:44,833
‫¿Está bien?

308
00:15:44,833 --> 00:15:46,170
‫Luego, en el

309
00:15:46,170 --> 00:15:49,810
‫siguiente paso, compararemos el token original con el cifrado.

310
00:15:49,810 --> 00:15:52,780
‫Entonces, nuevamente, tal como lo discutimos en el último video.

311
00:15:52,780 --> 00:15:56,657
‫Guárdelo aquí ahora, y esa es nuestra URL de restablecimiento.

312
00:16:00,940 --> 00:16:04,490
‫Y ahora, basándonos en esta URL, creemos rápidamente el

313
00:16:04,490 --> 00:16:06,233
‫mensaje aquí también.

314
00:16:07,950 --> 00:16:11,113
‫Entonces, ¿olvidaste tu contraseña?

315
00:16:13,120 --> 00:16:17,720
‫Envíe una solicitud de PATCH con su nueva contraseña y

316
00:16:18,900 --> 00:16:21,650
‫contraseña Confirme, por supuesto, a

317
00:16:24,380 --> 00:16:26,273
‫la URL de

318
00:16:30,850 --> 00:16:34,270
‫restablecimiento que acabamos de crear, ¿de acuerdo?

319
00:16:34,270 --> 00:16:37,500
‫Básicamente, darle al usuario algunas instrucciones aquí.

320
00:16:37,500 --> 00:16:39,373
‫Luego, en una nueva línea,

321
00:16:40,670 --> 00:16:44,053
‫también decimos, si no olvidó su contraseña, ignore

322
00:16:47,820 --> 00:16:49,610
‫este correo electrónico.

323
00:16:49,610 --> 00:16:51,690
‫Así que ese es un mensaje común y,

324
00:16:51,690 --> 00:16:54,320
‫de nuevo, estoy seguro de que lo ha visto de

325
00:16:54,320 --> 00:16:55,963
‫una forma u otra, de acuerdo.

326
00:16:56,860 --> 00:16:59,900
‫Así que, finalmente, enviemos el correo electrónico

327
00:16:59,900 --> 00:17:02,020
‫y recuerde que sendEmail es

328
00:17:02,020 --> 00:17:03,640
‫una función asincrónica.

329
00:17:03,640 --> 00:17:06,470
‫Y entonces, por lo tanto, debemos esperarlo aquí.

330
00:17:06,470 --> 00:17:07,303
‫¿Okey?

331
00:17:07,303 --> 00:17:09,693
‫Porque, por supuesto, devolverá una Promesa.

332
00:17:11,470 --> 00:17:14,850
‫Y recuerde ahora que la función sendEmail aquí

333
00:17:14,850 --> 00:17:17,490
‫toma un objeto con algunas opciones.

334
00:17:17,490 --> 00:17:22,490
‫Entonces el correo electrónico es usuario. correo electrónico, ¿verdad?

335
00:17:23,730 --> 00:17:28,150
‫O también podríamos decir, req. cuerpo. Email.

336
00:17:28,150 --> 00:17:31,233
‫Entonces eso es exactamente lo mismo, en realidad, ¿verdad?

337
00:17:32,900 --> 00:17:35,773
‫Entonces, el tema que

338
00:17:36,690 --> 00:17:41,363
‫queremos decir es, su token de restablecimiento de contraseña.

339
00:17:44,850 --> 00:17:48,540
‫Digamos de inmediato que solo es válido por 10

340
00:17:48,540 --> 00:17:52,290
‫minutos, para que el usuario sepa que tiene que darse prisa.

341
00:17:52,290 --> 00:17:55,113
‫Bien, y finalmente, el mensaje también.

342
00:17:56,940 --> 00:17:57,773
‫Bueno.

343
00:17:57,773 --> 00:18:00,080
‫Entonces, esperamos eso, y

344
00:18:00,080 --> 00:18:04,330
‫luego de eso, también enviemos, por supuesto, alguna respuesta.

345
00:18:04,330 --> 00:18:07,130
‫De acuerdo, siempre debe haber una respuesta; de

346
00:18:07,130 --> 00:18:08,860
‫lo contrario, como ya

347
00:18:08,860 --> 00:18:11,970
‫sabe, el ciclo de solicitud / respuesta nunca terminará.

348
00:18:11,970 --> 00:18:14,700
‫Entonces, simplemente enviamos un código

349
00:18:14,700 --> 00:18:18,720
‫200 y luego un mensaje con un formato agradable

350
00:18:19,670 --> 00:18:22,023
‫con un estado de

351
00:18:25,640 --> 00:18:28,550
‫éxito, y luego solo un mensaje

352
00:18:28,550 --> 00:18:32,410
‫rápido que dice: Token enviado al correo electrónico.

353
00:18:32,410 --> 00:18:33,243
‫Está bien.

354
00:18:33,243 --> 00:18:37,490
‫Y, por supuesto, no podemos enviar el token de restablecimiento aquí mismo,

355
00:18:37,490 --> 00:18:40,970
‫junto a la derecha, porque entonces todos podrían restablecer la

356
00:18:40,970 --> 00:18:42,910
‫contraseña de cualquier persona y

357
00:18:42,910 --> 00:18:45,440
‫hacerse cargo de cualquier cuenta que quisieran.

358
00:18:45,440 --> 00:18:47,740
‫Y esa es la razón por la que lo

359
00:18:47,740 --> 00:18:49,940
‫enviamos a una dirección de correo electrónico, porque

360
00:18:49,940 --> 00:18:51,800
‫asumimos que el correo electrónico es

361
00:18:51,800 --> 00:18:54,187
‫un lugar seguro, al que solo el usuario tiene acceso.

362
00:18:54,187 --> 00:18:55,020
‫Está bien.

363
00:18:56,990 --> 00:19:00,170
‫Vaya, entonces, este video, nuevamente se está ejecutando bastante largo, pero

364
00:19:00,170 --> 00:19:01,620
‫aún no hemos terminado.

365
00:19:01,620 --> 00:19:04,200
‫Ya casi terminamos, pero no del todo,

366
00:19:04,200 --> 00:19:06,590
‫porque puede ocurrir un error

367
00:19:06,590 --> 00:19:10,560
‫al usar este sendEmail, está bien, y en ese caso, por

368
00:19:10,560 --> 00:19:14,100
‫supuesto, queremos enviar un mensaje de error al cliente.

369
00:19:14,100 --> 00:19:16,720
‫Pero en este caso, necesitamos hacer más que

370
00:19:16,720 --> 00:19:18,980
‫simplemente enviar un mensaje de error.

371
00:19:18,980 --> 00:19:22,707
‫Básicamente, necesitamos retroceder el token de restablecimiento de contraseña

372
00:19:22,707 --> 00:19:26,660
‫y el restablecimiento de contraseña expiró que definimos, ¿de acuerdo?

373
00:19:26,660 --> 00:19:29,140
‫Así que ahora mismo no es suficiente

374
00:19:29,140 --> 00:19:31,340
‫simplemente detectar el error y luego

375
00:19:31,340 --> 00:19:34,100
‫enviarlo a nuestro middleware global de manejo de errores.

376
00:19:34,100 --> 00:19:36,980
‫Pero en su lugar, simplemente necesitamos

377
00:19:36,980 --> 00:19:39,660
‫agregar un bloque try-catch aquí.

378
00:19:39,660 --> 00:19:42,290
‫De nuevo, como queremos hacer

379
00:19:42,290 --> 00:19:45,363
‫más que simplemente enviar un error al cliente,

380
00:19:46,850 --> 00:19:49,633
‫básicamente tratamos de hacer esto, correcto, pero

381
00:19:50,950 --> 00:19:53,763
‫en caso de que haya un error,

382
00:19:54,660 --> 00:19:57,630
‫entonces, por supuesto, este bloque aquí se ejecuta.

383
00:19:57,630 --> 00:19:58,463
‫¿Está bien?

384
00:19:58,463 --> 00:20:01,380
‫Entonces, lo que queremos hacer en ese

385
00:20:01,380 --> 00:20:04,160
‫caso, bueno, básicamente queremos, como

386
00:20:04,160 --> 00:20:08,140
‫dije, restablecer tanto el token como la propiedad expires.

387
00:20:08,140 --> 00:20:09,620
‫Bueno.

388
00:20:09,620 --> 00:20:11,850
‫Entonces, passwordResetToken, y

389
00:20:15,360 --> 00:20:18,950
‫configúrelo como indefinido, de acuerdo.

390
00:20:18,950 --> 00:20:22,053
‫Y lo mismo para passwordResetExpires.

391
00:20:24,670 --> 00:20:25,503
‫Bueno.

392
00:20:25,503 --> 00:20:27,350
‫Y luego, por supuesto, como

393
00:20:27,350 --> 00:20:30,830
‫antes, esto solo modifica los datos, pero en realidad no los guarda.

394
00:20:30,830 --> 00:20:33,693
‫Y entonces vamos a agregar, tomar

395
00:20:35,560 --> 00:20:39,730
‫este, y así básicamente guardar los datos en este caso.

396
00:20:39,730 --> 00:20:41,750
‫Bien, y para terminar,

397
00:20:41,750 --> 00:20:45,140
‫por supuesto, volvemos con un error al

398
00:20:45,140 --> 00:20:46,620
‫siguiente middleware.

399
00:20:46,620 --> 00:20:48,223
‫Entonces, newAppError,

400
00:20:50,970 --> 00:20:55,373
‫hubo un error al enviar el correo electrónico.

401
00:20:57,940 --> 00:20:59,333
‫Vuelve a intentarlo más tarde.

402
00:21:00,220 --> 00:21:03,700
‫Y en este caso, el código de error puede ser 500.

403
00:21:03,700 --> 00:21:06,980
‫Entonces, esto es realmente como un error que sucedió en

404
00:21:06,980 --> 00:21:09,930
‫el servidor, por lo que tiene que ser

405
00:21:09,930 --> 00:21:12,893
‫un código de cinco, y 500 es, como, el estándar.

406
00:21:13,740 --> 00:21:15,160
‫Está bien.

407
00:21:15,160 --> 00:21:20,160
‫Entonces, sigamos adelante e intentemos esto de nuevo, está bien.

408
00:21:20,830 --> 00:21:25,130
‫Así que este es uno bastante largo de nuevo, pero bueno,

409
00:21:25,130 --> 00:21:27,200
‫tenemos que hacerlo, ¿verdad?

410
00:21:27,200 --> 00:21:31,173
‫Entonces, olvidé la contraseña, con este correo electrónico, echemos un vistazo.

411
00:21:32,260 --> 00:21:34,270
‫Por lo tanto, esto puede

412
00:21:34,270 --> 00:21:36,400
‫no tomar mucho tiempo, debido al envío

413
00:21:36,400 --> 00:21:40,360
‫del correo electrónico, pero en realidad funcionó ahora, tomó como cinco segundos, pero

414
00:21:40,360 --> 00:21:42,840
‫vemos que Token se envía al correo electrónico.

415
00:21:42,840 --> 00:21:45,770
‫y así, como sabemos, dado que usamos Mailtrap, en realidad no envió

416
00:21:45,770 --> 00:21:49,810
‫este correo electrónico a hello @ jones. io, pero en

417
00:21:49,810 --> 00:21:53,010
‫su lugar, el correo electrónico debería

418
00:21:53,010 --> 00:21:55,940
‫estar ahora atrapado dentro de Mailtrap.

419
00:21:55,940 --> 00:21:59,003
‫Y, de hecho, aquí en el lado izquierdo, ahora apareció.

420
00:21:59,890 --> 00:22:01,170
‫Está bien.

421
00:22:01,170 --> 00:22:04,440
‫Entonces, ese es el correo electrónico que especificamos y

422
00:22:04,440 --> 00:22:06,467
‫aquí obtenemos nuestra bonita URL.

423
00:22:07,960 --> 00:22:11,980
‫Bien, entonces el que creamos con el protocolo, el host

424
00:22:11,980 --> 00:22:15,070
‫y luego también con el token.

425
00:22:15,070 --> 00:22:17,210
‫Así que echemos un vistazo

426
00:22:17,210 --> 00:22:18,910
‫si este es

427
00:22:18,910 --> 00:22:20,873
‫realmente nuestro token simple, por

428
00:22:22,130 --> 00:22:26,690
‫lo que termina en 88df y, de hecho, tenemos resetToken aquí, 88df.

429
00:22:26,690 --> 00:22:29,050
‫Y ahora en la base de

430
00:22:29,050 --> 00:22:31,890
‫datos, deberíamos tener el token terminado en 1111.

431
00:22:31,890 --> 00:22:34,883
‫Entonces, confirmemos eso, aquí en

432
00:22:35,780 --> 00:22:40,780
‫Compass, vuelva a cargarlo y, de hecho, aquí vamos, ¿de acuerdo?

433
00:22:41,470 --> 00:22:45,260
‫Y de nuevo, esto aquí es en 10 minutos a partir de ahora.

434
00:22:45,260 --> 00:22:47,910
‫Genial, así que terminamos esa parte.

435
00:22:47,910 --> 00:22:50,290
‫A continuación, en el siguiente video, realmente

436
00:22:50,290 --> 00:22:52,320
‫restableceremos la contraseña, basándonos, por

437
00:22:52,320 --> 00:22:54,590
‫supuesto, en la nueva contraseña que

438
00:22:54,590 --> 00:22:58,030
‫el usuario envía con la solicitud de restablecimiento de contraseña.

439
00:22:58,030 --> 00:22:58,993
‫Entonces, nos vemos allí.

