﻿1
00:00:01,190 --> 00:00:03,320
‫Instructor: En este video y en los

2
00:00:03,320 --> 00:00:05,380
‫siguientes, implementaremos una funcionalidad de

3
00:00:05,380 --> 00:00:08,670
‫restablecimiento de contraseña fácil de usar, que es una especie de

4
00:00:08,670 --> 00:00:11,253
‫estándar en la mayoría de las aplicaciones web.

5
00:00:12,750 --> 00:00:15,390
‫Y probablemente, haya utilizado el restablecimiento de contraseña

6
00:00:15,390 --> 00:00:17,720
‫en algún sitio web antes y, por

7
00:00:17,720 --> 00:00:19,140
‫lo general, funciona así.

8
00:00:19,140 --> 00:00:21,280
‫Solo tiene que proporcionar su dirección

9
00:00:21,280 --> 00:00:23,490
‫de correo electrónico y luego recibirá un correo

10
00:00:23,490 --> 00:00:25,950
‫electrónico con un enlace donde puede hacer clic y

11
00:00:25,950 --> 00:00:29,410
‫luego lo llevará a una página donde puede ingresar una nueva contraseña.

12
00:00:29,410 --> 00:00:32,270
‫Este es un procedimiento muy estándar y así

13
00:00:32,270 --> 00:00:34,160
‫es como lo implementaremos aquí

14
00:00:34,160 --> 00:00:35,890
‫en esta aplicación.

15
00:00:35,890 --> 00:00:37,700
‫Básicamente hay dos pasos.

16
00:00:37,700 --> 00:00:40,930
‫La primera es que el usuario envía una solicitud de

17
00:00:40,930 --> 00:00:45,260
‫publicación a una ruta de contraseña olvidada, solo con esta dirección de correo electrónico.

18
00:00:45,260 --> 00:00:47,510
‫Esto luego creará un token de restablecimiento

19
00:00:47,510 --> 00:00:50,830
‫y lo enviará a la dirección de correo electrónico que se proporcionó.

20
00:00:50,830 --> 00:00:54,930
‫Solo un token simple y aleatorio, no un token web JSON.

21
00:00:54,930 --> 00:00:56,610
‫Esa es una diferencia aquí.

22
00:00:56,610 --> 00:00:59,507
‫Luego, en la segunda parte, que será

23
00:00:59,507 --> 00:01:02,800
‫el siguiente video, el usuario envía ese token desde su

24
00:01:02,800 --> 00:01:06,553
‫correo electrónico junto con una nueva contraseña para actualizar su contraseña.

25
00:01:08,040 --> 00:01:13,040
‫Básicamente, tendremos exportaciones. Olvidé la contraseña, que es el

26
00:01:14,810 --> 00:01:16,173
‫primer paso.

27
00:01:17,930 --> 00:01:22,930
‫Así que solicite, responda y luego y luego como segundo

28
00:01:25,560 --> 00:01:28,703
‫paso, hemos restablecido la contraseña.

29
00:01:33,480 --> 00:01:37,260
‫Entonces, sigamos adelante e implementemos estas dos rutas.

30
00:01:37,260 --> 00:01:40,520
‫De acuerdo, y eso es, por supuesto, en su enrutador de usuario o en

31
00:01:40,520 --> 00:01:42,053
‫el archivo de rutas de usuario.

32
00:01:43,190 --> 00:01:45,640
‫Pongámoslos también aquí y,

33
00:01:45,640 --> 00:01:48,793
‫de hecho, puedo duplicar estas líneas aquí.

34
00:01:51,131 --> 00:01:54,593
‫Así que hemos vuelto a olvidar la

35
00:01:55,820 --> 00:01:58,170
‫contraseña, que solo recibirá

36
00:01:58,170 --> 00:02:03,170
‫la dirección de correo electrónico y luego restablecerá la contraseña,

37
00:02:03,260 --> 00:02:06,983
‫que recibirá el token y la nueva contraseña.

38
00:02:09,360 --> 00:02:10,530
‫Este es el

39
00:02:10,530 --> 00:02:13,220
‫que vamos a empezar a implementar en esta conferencia.

40
00:02:13,220 --> 00:02:17,570
‫Como antes, especifiquemos nuestros pasos aquí.

41
00:02:17,570 --> 00:02:20,510
‫Entonces, primero, obtenga el usuario según

42
00:02:23,180 --> 00:02:25,890
‫el correo electrónico publicado

43
00:02:29,590 --> 00:02:32,383
‫y luego genere el token aleatorio.

44
00:02:37,090 --> 00:02:40,043
‫Y luego, básicamente, envíelo de vuelta como un correo electrónico.

45
00:02:45,910 --> 00:02:48,793
‫Esto es bastante común para nosotros en este momento.

46
00:02:49,680 --> 00:02:54,397
‫Entonces, usuario, esperemos que el usuario encuentre un punto y ahora

47
00:02:55,330 --> 00:02:57,650
‫busque uno, no busque por

48
00:02:57,650 --> 00:03:00,920
‫id porque no conocemos el id del usuario.

49
00:03:00,920 --> 00:03:04,240
‫Y el usuario, por supuesto, tampoco conoce su propia identificación, por

50
00:03:04,240 --> 00:03:06,733
‫lo que especificamos la dirección de correo electrónico.

51
00:03:08,390 --> 00:03:11,363
‫Básicamente, es el único dato que se conoce.

52
00:03:12,230 --> 00:03:16,823
‫Y eso es stand on request dot body dot dirección de correo electrónico.

53
00:03:18,723 --> 00:03:20,580
‫Y, por supuesto, ahora tenemos

54
00:03:20,580 --> 00:03:25,390
‫que decir que estamos en una función asíncrona y luego, como antes,

55
00:03:25,390 --> 00:03:27,183
‫envuélvala en catch async.

56
00:03:30,690 --> 00:03:33,263
‫Déjelo guardar y el error desaparecerá.

57
00:03:35,280 --> 00:03:36,710
‫Luego, el siguiente paso, verifiquemos

58
00:03:36,710 --> 00:03:38,103
‫si el usuario existe.

59
00:03:39,160 --> 00:03:44,160
‫Entonces, si no hay usuario, regrese al siguiente middleware

60
00:03:48,950 --> 00:03:51,790
‫junto con un nuevo error.

61
00:03:51,790 --> 00:03:56,790
‫No es ningún usuario con esa dirección de correo electrónico.

62
00:03:59,190 --> 00:04:02,510
‫Y luego podemos poner un 404, que como ya

63
00:04:02,510 --> 00:04:04,023
‫sabéis, significa no encontrado.

64
00:04:05,567 --> 00:04:09,310
‫A continuación, generemos el token aleatorio y para

65
00:04:09,310 --> 00:04:11,600
‫eso, una vez más,

66
00:04:11,600 --> 00:04:14,610
‫crearemos un método instantáneo en el usuario.

67
00:04:14,610 --> 00:04:17,430
‫Porque una vez más, esto realmente tiene que ver con

68
00:04:17,430 --> 00:04:19,183
‫los datos del usuario en sí.

69
00:04:20,280 --> 00:04:22,660
‫Y vamos a escribir un poco de

70
00:04:22,660 --> 00:04:25,160
‫código realmente, así que, si fuera solo una línea

71
00:04:25,160 --> 00:04:27,600
‫de código, entonces, por supuesto, podríamos ponerlo aquí.

72
00:04:27,600 --> 00:04:29,540
‫Pero necesitamos un par de líneas

73
00:04:29,540 --> 00:04:31,830
‫de código y, de nuevo, es un poco

74
00:04:31,830 --> 00:04:34,080
‫más limpio separarlo en su propia función.

75
00:04:34,080 --> 00:04:37,823
‫Y eso por lo general con Mongoose es mejor como método instantáneo.

76
00:04:40,500 --> 00:04:45,490
‫Así que aquí abajo, editemos aquí al final.

77
00:04:45,490 --> 00:04:50,490
‫Por lo tanto, los métodos de punto de esquema de usuario crean un token de restablecimiento de contraseña.

78
00:04:57,900 --> 00:04:59,950
‫Un nombre bastante largo y descriptivo.

79
00:04:59,950 --> 00:05:02,020
‫Me gusta hacerlo así,

80
00:05:02,020 --> 00:05:05,253
‫para saber exactamente a qué me enfrento.

81
00:05:07,600 --> 00:05:11,690
‫El token de restablecimiento de contraseña debería ser básicamente una cadena aleatoria

82
00:05:11,690 --> 00:05:13,650
‫pero, al mismo tiempo, no

83
00:05:13,650 --> 00:05:17,250
‫necesita ser tan criptográficamente seguro como el hash de contraseña

84
00:05:17,250 --> 00:05:18,433
‫que creamos antes.

85
00:05:19,640 --> 00:05:22,720
‫Podemos usar la función de bytes aleatorios muy

86
00:05:22,720 --> 00:05:25,083
‫simple del módulo criptográfico incorporado.

87
00:05:27,350 --> 00:05:30,173
‫Sigamos adelante y agreguemos eso.

88
00:05:35,620 --> 00:05:40,620
‫Crypto requiere y nuevamente, es un módulo de nodo incorporado, por lo que

89
00:05:40,870 --> 00:05:43,203
‫no es necesario instalar nada.

90
00:05:44,700 --> 00:05:45,800
‫Frio.

91
00:05:45,800 --> 00:05:50,800
‫Ahora, generemos nuestro token.

92
00:05:56,576 --> 00:05:59,913
‫Y para eso, usamos bytes aleatorios de puntos criptográficos y

93
00:06:02,440 --> 00:06:04,750
‫luego aquí necesitamos especificar la cantidad de

94
00:06:04,750 --> 00:06:05,893
‫caracteres básicamente.

95
00:06:07,490 --> 00:06:09,530
‫Y luego también al final,

96
00:06:09,530 --> 00:06:11,823
‫lo convertimos en una cadena hexadecimal.

97
00:06:14,045 --> 00:06:14,910
‫Dos

98
00:06:17,020 --> 00:06:20,723
‫cadenas y luego podemos especificar la opción hexadecimal aquí.

99
00:06:22,060 --> 00:06:23,690
‫Ahora, si se

100
00:06:23,690 --> 00:06:25,360
‫está preguntando por qué estamos

101
00:06:25,360 --> 00:06:28,710
‫creando este token, supongo que todavía no lo he explicado.

102
00:06:28,710 --> 00:06:31,170
‫Básicamente, este token es lo que le

103
00:06:31,170 --> 00:06:34,660
‫enviaremos al usuario, por lo que es como una contraseña de

104
00:06:34,660 --> 00:06:38,610
‫restablecimiento que el usuario puede usar para crear una nueva contraseña real.

105
00:06:38,610 --> 00:06:41,690
‫Y, por supuesto, solo el usuario tendrá acceso a este token.

106
00:06:41,690 --> 00:06:45,363
‫Y así, de hecho, realmente se comporta como una contraseña.

107
00:06:45,363 --> 00:06:48,380
‫Dado que esencialmente es solo una contraseña, significa que

108
00:06:48,380 --> 00:06:52,210
‫si un pirata informático puede acceder a nuestra base de datos, entonces

109
00:06:52,210 --> 00:06:55,000
‫eso le permitirá al pirata informático obtener acceso

110
00:06:55,000 --> 00:06:57,483
‫a la cuenta estableciendo una nueva contraseña.

111
00:06:59,474 --> 00:07:01,740
‫Si simplemente almacenamos este token de restablecimiento en

112
00:07:01,740 --> 00:07:05,160
‫nuestra base de datos ahora, entonces, si algún atacante obtiene acceso a

113
00:07:05,160 --> 00:07:07,200
‫la base de datos, podría usar ese

114
00:07:07,200 --> 00:07:10,090
‫token y crear una nueva contraseña usando ese token en

115
00:07:10,090 --> 00:07:11,690
‫lugar de hacerlo usted.

116
00:07:11,690 --> 00:07:14,120
‫Entonces controlarían efectivamente su cuenta en lugar de

117
00:07:14,120 --> 00:07:15,563
‫que usted lo haga.

118
00:07:16,810 --> 00:07:19,150
‫Al igual que una contraseña, nunca deberíamos almacenar

119
00:07:19,150 --> 00:07:21,933
‫un token de restablecimiento simple en la base de datos.

120
00:07:23,030 --> 00:07:24,670
‫En realidad, vamos a

121
00:07:24,670 --> 00:07:26,880
‫cifrarlo, pero como antes con la

122
00:07:26,880 --> 00:07:29,670
‫contraseña, no necesita un método de cifrado tan

123
00:07:29,670 --> 00:07:30,803
‫fuerte criptográficamente.

124
00:07:31,640 --> 00:07:34,653
‫Porque estas fichas de reinicio son un vector de

125
00:07:34,653 --> 00:07:35,993
‫ataque mucho menos peligroso.

126
00:07:37,050 --> 00:07:39,230
‫Nuevamente, solo usaremos el módulo

127
00:07:39,230 --> 00:07:40,233
‫criptográfico incorporado.

128
00:07:41,610 --> 00:07:44,213
‫Funciona de esta forma extraña.

129
00:07:45,420 --> 00:07:48,740
‫Decimos cripto, luego crea hash con el

130
00:07:51,170 --> 00:07:54,550
‫algoritmo sha 256, luego necesitamos decir actualización

131
00:07:55,750 --> 00:07:57,560
‫y luego

132
00:07:57,560 --> 00:08:00,593
‫variable donde se almacena el token.

133
00:08:01,840 --> 00:08:04,340
‫Cualquier cadena que queramos cifrar básicamente.

134
00:08:04,340 --> 00:08:08,570
‫Y luego tenemos que decir digerir y luego almacenarlo

135
00:08:08,570 --> 00:08:10,433
‫nuevamente como hexadecimal.

136
00:08:12,950 --> 00:08:16,660
‫¿Y ahora dónde vamos a guardar realmente este token de reinicio?

137
00:08:16,660 --> 00:08:19,883
‫Bueno, crearemos un nuevo campo en nuestro esquema de base de datos.

138
00:08:20,886 --> 00:08:23,340
‫Porque, por supuesto, queremos guardarlo en la base de

139
00:08:23,340 --> 00:08:24,940
‫datos, para luego compararlo

140
00:08:24,940 --> 00:08:27,003
‫con el token que proporciona el usuario.

141
00:08:30,037 --> 00:08:30,870
‫Hagámoslo aquí al final.

142
00:08:34,599 --> 00:08:36,349
‫Token de restablecimiento de contraseña, esa

143
00:08:39,884 --> 00:08:41,248
‫es la cadena.

144
00:08:41,248 --> 00:08:44,331
‫Y luego también expira el restablecimiento de contraseña.

145
00:08:49,890 --> 00:08:51,780
‫Porque este restablecimiento caducará

146
00:08:51,780 --> 00:08:56,100
‫después de un cierto período de tiempo como medida de seguridad.

147
00:08:56,100 --> 00:08:58,820
‫Solo tendrá 10 minutos para restablecer

148
00:08:58,820 --> 00:09:00,133
‫su contraseña.

149
00:09:03,850 --> 00:09:05,500
‫Ahora sigamos adelante y usemos estos.

150
00:09:06,950 --> 00:09:11,950
‫Este token de restablecimiento de contraseña de punto es igual a

151
00:09:13,440 --> 00:09:14,843
‫este cifrado.

152
00:09:19,270 --> 00:09:23,720
‫A continuación, establezcamos el vencimiento del restablecimiento de contraseña y

153
00:09:24,570 --> 00:09:29,400
‫establezcamos ese punto de fecha ahora y luego simplemente agregue un

154
00:09:29,400 --> 00:09:32,193
‫par de segundos a eso.

155
00:09:33,510 --> 00:09:35,910
‫Queremos que funcione durante 10

156
00:09:35,910 --> 00:09:40,093
‫minutos y eso es 10 y luego lo necesitamos en milisegundos.

157
00:09:41,270 --> 00:09:46,270
‫Veces 60 por segundos y luego 1000 por milisegundos.

158
00:09:49,124 --> 00:09:52,320
‫Y luego también quiero devolver el token de texto sin formato porque

159
00:09:52,320 --> 00:09:54,770
‫en realidad es el que enviaremos a través

160
00:09:54,770 --> 00:09:55,783
‫del correo electrónico.

161
00:09:58,080 --> 00:10:01,863
‫Devuelve el token de reinicio.

162
00:10:06,345 --> 00:10:08,860
‫Necesitamos enviar por correo electrónico el

163
00:10:08,860 --> 00:10:11,660
‫token de reinicio sin cifrar porque, de lo

164
00:10:11,660 --> 00:10:14,503
‫contrario, no tendría mucho sentido cifrarlo en absoluto.

165
00:10:15,430 --> 00:10:17,090
‫Si el token que

166
00:10:17,090 --> 00:10:19,290
‫estaba en la base de datos fuera exactamente

167
00:10:19,290 --> 00:10:20,980
‫el mismo que podríamos usar para

168
00:10:20,980 --> 00:10:23,643
‫cambiar la contraseña, entonces eso no sería ningún cifrado.

169
00:10:24,640 --> 00:10:26,417
‫Enviamos un token por correo electrónico

170
00:10:26,417 --> 00:10:29,420
‫y luego tenemos la versión encriptada en nuestra base de datos.

171
00:10:29,420 --> 00:10:32,210
‫Y ese cifrado es básicamente inútil para

172
00:10:32,210 --> 00:10:34,050
‫cambiar la contraseña.

173
00:10:34,050 --> 00:10:36,250
‫Es como cuando guardamos

174
00:10:36,250 --> 00:10:39,470
‫solo la contraseña encriptada en la

175
00:10:39,470 --> 00:10:43,230
‫base de datos, tal como lo hicimos aquí,

176
00:10:43,230 --> 00:10:46,967
‫así que encriptamos la contraseña usando bcrypt.

177
00:10:48,439 --> 00:10:51,100
‫Tenga en cuenta que los únicos datos confidenciales

178
00:10:51,100 --> 00:10:53,680
‫que se guardan en forma encriptada y luego

179
00:10:53,680 --> 00:10:56,620
‫se comparan con la versión encriptada que está en la

180
00:10:56,620 --> 00:10:57,770
‫base de datos.

181
00:11:00,385 --> 00:11:02,500
‫Eso es solo registrar estos dos

182
00:11:02,500 --> 00:11:06,730
‫en la consola que hará nuestras vidas un poco más fáciles en el futuro.

183
00:11:06,730 --> 00:11:09,630
‫Digamos restablecer token y estoy iniciando sesión aquí

184
00:11:10,470 --> 00:11:11,440
‫como un

185
00:11:11,440 --> 00:11:14,930
‫objeto porque de esta manera, me dirá el nombre

186
00:11:14,930 --> 00:11:17,803
‫de la variable junto con su valor.

187
00:11:20,210 --> 00:11:25,153
‫Y luego lo mismo con este token de restablecimiento de contraseña de punto.

188
00:11:28,030 --> 00:11:29,880
‫Este realmente no funciona con

189
00:11:29,880 --> 00:11:32,340
‫objetos de escritura, esta nueva forma de

190
00:11:32,340 --> 00:11:34,140
‫ES6 y dejémoslo así.

191
00:11:36,550 --> 00:11:38,080
‫De todos modos, regresemos

192
00:11:38,080 --> 00:11:40,153
‫aquí y luego usemos esa función.

193
00:11:41,660 --> 00:11:44,930
‫Así que recuerde cómo devolvimos el token de

194
00:11:44,930 --> 00:11:46,653
‫reinicio y almacénelo aquí.

195
00:11:48,040 --> 00:11:52,873
‫Entonces, el token de reinicio es igual al conjunto de puntos del usuario y ya

196
00:11:54,370 --> 00:11:56,373
‫no estoy seguro del nombre.

197
00:11:58,500 --> 00:12:00,560
‫Cree un token de restablecimiento de contraseña, por

198
00:12:00,560 --> 00:12:01,633
‫lo que es largo.

199
00:12:03,430 --> 00:12:06,240
‫Está bien y eso está hecho,

200
00:12:06,240 --> 00:12:09,460
‫pero en realidad lo que hicimos fue modificar

201
00:12:09,460 --> 00:12:10,943
‫los datos aquí.

202
00:12:12,780 --> 00:12:16,580
‫Cuando configuramos este punto, la contraseña expira, por ejemplo,

203
00:12:16,580 --> 00:12:19,040
‫a este valor, de hecho no

204
00:12:19,040 --> 00:12:20,880
‫actualizamos realmente el documento.

205
00:12:20,880 --> 00:12:22,063
‫No lo salvamos.

206
00:12:23,100 --> 00:12:24,880
‫Realmente solo lo

207
00:12:24,880 --> 00:12:27,563
‫modificamos, pero ahora necesitamos guardarlo.

208
00:12:29,950 --> 00:12:34,653
‫Digamos que esperar al usuario a guardar.

209
00:12:36,750 --> 00:12:39,583
‫Pero observe lo que sucede ahora que usamos esto.

210
00:12:43,910 --> 00:12:46,463
‫Tomemos este de aquí.

211
00:12:50,980 --> 00:12:53,080
‫Esta es la ruta que encontramos antes.

212
00:12:54,440 --> 00:12:57,750
‫Y ahora tenemos esta ruta que aún no está definida.

213
00:12:57,750 --> 00:12:59,413
‫Veamos por qué es así.

214
00:13:00,290 --> 00:13:04,740
‫En la ruta del usuario, claramente tenemos la misma URL aquí, pero

215
00:13:04,740 --> 00:13:08,463
‫veo que en realidad necesitamos hacer una solicitud de publicación.

216
00:13:09,390 --> 00:13:13,380
‫De acuerdo, de acuerdo, pero ahora recibimos un error que dice que

217
00:13:13,380 --> 00:13:16,200
‫proporcione un correo electrónico y una contraseña.

218
00:13:16,200 --> 00:13:18,320
‫Y eso es lo que quise decir cuando dije

219
00:13:18,320 --> 00:13:20,343
‫que observa lo que sucede cuando intentas esto.

220
00:13:21,990 --> 00:13:25,330
‫Eso sucede porque estamos tratando de guardar un documento,

221
00:13:25,330 --> 00:13:28,860
‫pero no especificamos todos los datos obligatorios, por lo que

222
00:13:28,860 --> 00:13:31,453
‫los campos que marcamos como obligatorios.

223
00:13:32,502 --> 00:13:34,683
‫Arreglemos eso rápidamente.

224
00:13:35,848 --> 00:13:38,888
‫Todo lo que tenemos que hacer es pasar una opción especial

225
00:13:38,888 --> 00:13:41,643
‫a este método de guardado de puntos de usuario.

226
00:13:43,140 --> 00:13:43,973
‫Decimos

227
00:13:47,210 --> 00:13:48,720
‫validar antes de guardar

228
00:13:49,890 --> 00:13:51,293
‫establecido en falso.

229
00:13:52,332 --> 00:13:55,260
‫Esto luego desactivará todos los validadores que

230
00:13:55,260 --> 00:13:56,993
‫especificamos en nuestro esquema.

231
00:13:58,540 --> 00:14:01,100
‫Son estas pequeñas cosas que necesita saber las

232
00:14:01,100 --> 00:14:02,800
‫que marcarán la diferencia.

233
00:14:03,790 --> 00:14:06,570
‫Ahora bien, tampoco sabía realmente que esto existía

234
00:14:06,570 --> 00:14:09,170
‫porque nadie realmente sabe todas las cosas.

235
00:14:09,170 --> 00:14:10,260
‫Es imposible.

236
00:14:10,260 --> 00:14:13,010
‫Una biblioteca como Mongoose es simplemente demasiado grande para que

237
00:14:13,010 --> 00:14:14,833
‫sepas todo lo que hay.

238
00:14:16,010 --> 00:14:19,020
‫Seguí adelante y leí la documentación de

239
00:14:19,020 --> 00:14:22,710
‫Mongoose y ahí es donde encontré esta opción extremadamente útil.

240
00:14:22,710 --> 00:14:25,050
‫Todo esto solo para decirlo de nuevo, nadie

241
00:14:25,050 --> 00:14:26,520
‫lo sabe todo y, por

242
00:14:26,520 --> 00:14:28,520
‫lo tanto, es un buen hábito

243
00:14:28,520 --> 00:14:29,960
‫que, si tiene

244
00:14:29,960 --> 00:14:31,830
‫algún problema, eche un vistazo a

245
00:14:31,830 --> 00:14:34,210
‫la documentación de la biblioteca que está utilizando.

246
00:14:34,210 --> 00:14:35,963
‫Echemos un vistazo a esto ahora.

247
00:14:39,410 --> 00:14:42,260
‫Y todavía recibimos el mismo error aquí, pero veo aquí

248
00:14:42,260 --> 00:14:43,890
‫abajo que en realidad proviene

249
00:14:43,890 --> 00:14:45,883
‫de la función de inicio de sesión.

250
00:14:48,210 --> 00:14:50,573
‫Echemos un vistazo a lo que está pasando aquí.

251
00:14:51,490 --> 00:14:54,550
‫Echemos un vistazo también a las rutas.

252
00:14:54,550 --> 00:14:56,343
‫Ah, está bien, aquí está el problema.

253
00:14:57,610 --> 00:14:59,420
‫Ahora estamos intentando llamar al controlador

254
00:14:59,420 --> 00:15:02,170
‫de inicio de sesión, lo que, por supuesto, no tiene sentido.

255
00:15:03,660 --> 00:15:05,790
‫Aquí está la contraseña olvidada.

256
00:15:05,790 --> 00:15:07,633
‫Aquí está restablecer la contraseña.

257
00:15:08,850 --> 00:15:12,290
‫Entonces, el error que obtuvimos antes en realidad no se debió

258
00:15:12,290 --> 00:15:13,463
‫a la validación.

259
00:15:16,312 --> 00:15:17,980
‫Enviemos esto de nuevo y ahora

260
00:15:17,980 --> 00:15:20,100
‫recibimos el error de que no hay ningún

261
00:15:20,100 --> 00:15:21,420
‫usuario con esta dirección

262
00:15:21,420 --> 00:15:24,140
‫de correo electrónico y eso es porque no especificamos ninguna

263
00:15:24,140 --> 00:15:26,103
‫dirección de correo electrónico en el cuerpo.

264
00:15:28,390 --> 00:15:29,680
‫Lo probamos y

265
00:15:29,680 --> 00:15:32,300
‫ahora es el momento de probarlo con

266
00:15:32,300 --> 00:15:34,093
‫un correo electrónico de usuario.

267
00:15:43,409 --> 00:15:44,440
‫Está bien.

268
00:15:44,440 --> 00:15:46,380
‫Y ahora no debería

269
00:15:46,380 --> 00:15:49,320
‫hacer nada porque no estamos enviando ninguna respuesta.

270
00:15:49,320 --> 00:15:50,700
‫Cancelemos esto porque

271
00:15:50,700 --> 00:15:52,540
‫todo lo que realmente me

272
00:15:52,540 --> 00:15:55,227
‫interesó es ver estos tokens aquí y luego

273
00:15:55,227 --> 00:15:57,830
‫también echar un vistazo al objeto de usuario.

274
00:15:57,830 --> 00:16:01,050
‫Este es el token de reinicio original, por lo

275
00:16:01,050 --> 00:16:04,150
‫que verá que es una cadena hexadecimal aleatoria

276
00:16:04,150 --> 00:16:06,593
‫y luego tenemos el cifrado aquí.

277
00:16:07,840 --> 00:16:11,330
‫Este recuerdo es el que no debería estar en la base de

278
00:16:11,330 --> 00:16:13,663
‫datos, por lo que termina en a901.

279
00:16:14,930 --> 00:16:16,230
‫Echemos un vistazo a eso.

280
00:16:18,410 --> 00:16:20,460
‫Y de hecho, aquí está,

281
00:16:20,460 --> 00:16:24,740
‫el token de restablecimiento de contraseña que termina en este a901.

282
00:16:24,740 --> 00:16:28,960
‫Y también la fecha, que de hecho es de 10 minutos a partir de ahora.

283
00:16:28,960 --> 00:16:31,753
‫Ahora sabes a qué hora estoy grabando este video.

284
00:16:33,130 --> 00:16:35,340
‫De todos modos, pero esto funcionó bien.

285
00:16:35,340 --> 00:16:37,890
‫Y esta es en realidad la primera

286
00:16:37,890 --> 00:16:41,561
‫parte de la creación de esta funcionalidad de restablecimiento de contraseña.

287
00:16:41,561 --> 00:16:43,140
‫En el siguiente video,

288
00:16:43,140 --> 00:16:46,840
‫enviaremos este token aquí por correo electrónico al usuario y,

289
00:16:46,840 --> 00:16:49,500
‫de hecho, preparamos un video separado solo

290
00:16:49,500 --> 00:16:52,370
‫para aprender cómo enviar correos electrónicos con node

291
00:16:52,370 --> 00:16:53,470
‫a js.

292
00:16:53,470 --> 00:16:55,100
‫Es muy divertido,

293
00:16:55,100 --> 00:16:58,363
‫así que no espere para mudarse allí de inmediato.

