﻿1
00:00:01,120 --> 00:00:02,370
‫Instructor: En esta

2
00:00:02,370 --> 00:00:06,430
‫lección, administraremos las contraseñas de nuestros usuarios en la base de datos.

3
00:00:06,430 --> 00:00:08,790
‫Y con eso me refiero a validar

4
00:00:08,790 --> 00:00:12,660
‫primero si la contraseña ingresada es igual a la contraseña confirmada

5
00:00:12,660 --> 00:00:16,380
‫y luego también a cifrar la contraseña en la base de

6
00:00:16,380 --> 00:00:18,633
‫datos para protegerla contra ataques.

7
00:00:20,320 --> 00:00:22,330
‫Entonces, lo primero que

8
00:00:22,330 --> 00:00:26,690
‫haremos es validar si las dos contraseñas ingresadas son iguales.

9
00:00:26,690 --> 00:00:28,840
‫Y el mejor lugar para hacerlo

10
00:00:28,840 --> 00:00:31,760
‫es aquí en la confirmación de contraseña, ¿de acuerdo?

11
00:00:31,760 --> 00:00:36,283
‫Entonces, escriba nuestro validador personalizado para eso, ¿de acuerdo?

12
00:00:38,480 --> 00:00:41,890
‫Así que recuerde, usamos la propiedad de validación y

13
00:00:41,890 --> 00:00:44,270
‫luego, dado que queremos crear

14
00:00:44,270 --> 00:00:48,420
‫una función y también un mensaje de error, abramos un

15
00:00:49,480 --> 00:00:51,990
‫nuevo objeto aquí y luego creemos

16
00:00:51,990 --> 00:00:53,920
‫un validador, que será

17
00:00:53,920 --> 00:00:56,370
‫la función y comencemos con este.

18
00:00:56,370 --> 00:00:58,780
‫Entonces, recuerde, todo lo que necesitamos aquí es especificar

19
00:00:58,780 --> 00:01:01,770
‫una función de devolución de llamada simple que luego se llamará

20
00:01:01,770 --> 00:01:03,853
‫cuando se cree el nuevo documento.

21
00:01:04,940 --> 00:01:06,163
‫Entonces, función, y

22
00:01:07,210 --> 00:01:10,320
‫aquí nuevamente, no podemos usar una función de flecha porque

23
00:01:10,320 --> 00:01:13,183
‫en realidad necesitamos usar la palabra clave disk.

24
00:01:14,690 --> 00:01:15,523
‫¿Okey?

25
00:01:16,560 --> 00:01:19,180
‫Entonces, recuerde que de la función de

26
00:01:19,180 --> 00:01:21,470
‫validación devolvemos verdadero o falso

27
00:01:21,470 --> 00:01:23,960
‫y si el valor devuelto es falso,

28
00:01:23,960 --> 00:01:27,550
‫entonces significa que obtendremos un error de validación, ¿de acuerdo?

29
00:01:27,550 --> 00:01:29,630
‫Y, por supuesto, si es cierto, entonces no.

30
00:01:29,630 --> 00:01:33,820
‫Entonces, lo que queremos aquí es decir que el elemento actual, la contraseña

31
00:01:33,820 --> 00:01:37,643
‫de confirmación, es igual a esta contraseña de punto, entonces, la contraseña

32
00:01:37,643 --> 00:01:40,760
‫de confirmación, es igual a esta contraseña de punto,

33
00:01:40,760 --> 00:01:42,350
‫¡y eso es todo!

34
00:01:42,350 --> 00:01:46,510
‫Entonces, por ejemplo, si la confirmación de contraseña es A-B-C, y

35
00:01:46,510 --> 00:01:49,520
‫la contraseña también es A-B-C, entonces esto, por

36
00:01:49,520 --> 00:01:52,530
‫supuesto, volverá a ser verdadero, ¿de acuerdo?

37
00:01:52,530 --> 00:01:54,330
‫Entonces, se pasa la

38
00:01:54,330 --> 00:01:56,550
‫validación y no se producirá ningún error.

39
00:01:56,550 --> 00:02:00,440
‫Pero, si la contraseña inicial es, digamos, X-Y-Z, entonces, por

40
00:02:00,440 --> 00:02:02,860
‫supuesto, esto devolverá falso y

41
00:02:02,860 --> 00:02:05,820
‫tendremos un error de validación, ¿de acuerdo?

42
00:02:05,820 --> 00:02:08,660
‫Entonces, muy simple, pero debemos tener

43
00:02:08,660 --> 00:02:12,320
‫en cuenta que esto solo funcionará para guardar, ¿de acuerdo?

44
00:02:12,320 --> 00:02:13,950
‫Así que hablé de eso

45
00:02:13,950 --> 00:02:17,840
‫antes cuando usamos el validador personalizado en el modelo de gira, ¿verdad?

46
00:02:17,840 --> 00:02:19,740
‫Pero te lo recuerdo aquí

47
00:02:19,740 --> 00:02:24,120
‫de nuevo porque esto es absolutamente crucial aquí en este punto, ¿de acuerdo?

48
00:02:24,120 --> 00:02:26,423
‫Así que déjame que te lo escriba aquí.

49
00:02:27,739 --> 00:02:29,010
‫(clic

50
00:02:29,010 --> 00:02:30,410
‫del teclado)

51
00:02:30,410 --> 00:02:32,050
‫Al guardar.

52
00:02:32,050 --> 00:02:32,883
‫¿Okey?

53
00:02:32,883 --> 00:02:35,740
‫Y por ello, siempre que queramos actualizar un usuario,

54
00:02:35,740 --> 00:02:38,250
‫siempre tendremos que usar también guardar y

55
00:02:38,250 --> 00:02:41,010
‫no, por ejemplo, buscar uno y actualizar como

56
00:02:41,010 --> 00:02:43,310
‫hicimos con nuestros tours, ¿de acuerdo?

57
00:02:43,310 --> 00:02:45,570
‫Así que tengamos esto en cuenta

58
00:02:45,570 --> 00:02:48,730
‫cuando escribamos el resto del código en el resto de

59
00:02:48,730 --> 00:02:51,670
‫la sección y especialmente para la actualización, ¿de acuerdo?

60
00:02:51,670 --> 00:02:54,400
‫Porque digamos que actualizamos la contraseña del usuario

61
00:02:54,400 --> 00:02:56,320
‫simplemente con una actualización regular.

62
00:02:56,320 --> 00:02:58,910
‫Entonces, en ese caso, esta contraseña confirma la

63
00:02:58,910 --> 00:03:01,540
‫validación que tenemos aquí ya no funcionaría, ¿de acuerdo?

64
00:03:01,540 --> 00:03:04,670
‫Y, por supuesto, eso no puede suceder, ¿de acuerdo?

65
00:03:04,670 --> 00:03:08,410
‫Y así, nuevamente, tenga en cuenta que esto solo funcionará

66
00:03:08,410 --> 00:03:12,920
‫cuando creamos un nuevo objeto, por lo tanto, al crear puntos o al guardar.

67
00:03:12,920 --> 00:03:13,753
‫¿Okey?

68
00:03:13,753 --> 00:03:15,524
‫Entonces, al crear y

69
00:03:15,524 --> 00:03:18,550
‫guardar, al crear y guardar, ¿de

70
00:03:18,550 --> 00:03:19,383
‫acuerdo?

71
00:03:19,383 --> 00:03:22,830
‫Entonces creamos un nuevo objeto usando crear, ¿verdad?

72
00:03:22,830 --> 00:03:25,431
‫Entonces, aquí mismo, usé un punto para crear Entonces,

73
00:03:25,431 --> 00:03:27,100
‫aquí mismo, usé un punto

74
00:03:27,100 --> 00:03:28,463
‫para crear, pero

75
00:03:28,463 --> 00:03:31,143
‫recuerden que también les mostré que podemos usar un

76
00:03:33,100 --> 00:03:35,160
‫usuario para guardar puntos, como este, ¿verdad?

77
00:03:35,160 --> 00:03:38,470
‫Y de hecho, también podemos usar un punto de usuario

78
00:03:38,470 --> 00:03:41,550
‫para guardar para actualizar al usuario, ¿de acuerdo?

79
00:03:41,550 --> 00:03:43,593
‫Pero de nuevo, hablaremos de ello un poco más tarde.

80
00:03:44,820 --> 00:03:45,810
‫¿Okey?

81
00:03:45,810 --> 00:03:50,063
‫Así que probemos ahora esta validación aquí, ¿de acuerdo?

82
00:03:51,230 --> 00:03:53,280
‫Entonces, en primer lugar, intentemos crear un

83
00:03:53,280 --> 00:03:55,210
‫nuevo usuario con estos datos aquí,

84
00:03:55,210 --> 00:03:57,660
‫lo que no debería funcionar porque ya tenemos

85
00:03:57,660 --> 00:04:01,020
‫un usuario con esta dirección de correo electrónico y dijimos que

86
00:04:01,020 --> 00:04:03,290
‫este debería ser único y, por lo tanto,

87
00:04:03,290 --> 00:04:04,590
‫no debería funcionar.

88
00:04:06,330 --> 00:04:12,210
‫Bien, y por supuesto nuestro error de clave duplicada, ¿verdad?

89
00:04:12,210 --> 00:04:14,170
‫Ahora bien, si estuvieras en producción,

90
00:04:14,170 --> 00:04:17,040
‫entonces, por supuesto, ya obtendríamos nuestro error de formato

91
00:04:17,040 --> 00:04:19,620
‫agradable que creamos en la última sección, ¿verdad?

92
00:04:19,620 --> 00:04:23,730
‫Pero ahora mismo estamos en desarrollo y ese es el error que

93
00:04:23,730 --> 00:04:25,383
‫definimos que queremos ver.

94
00:04:26,510 --> 00:04:27,343
‫¿Okey?

95
00:04:28,440 --> 00:04:30,890
‫Entonces, simplemente usemos otro correo electrónico aquí y, dado

96
00:04:30,890 --> 00:04:33,060
‫que estamos trabajando en el correo electrónico

97
00:04:33,060 --> 00:04:36,593
‫aquí, también veamos cómo funciona la validación de la dirección de correo electrónico.

98
00:04:37,650 --> 00:04:40,833
‫Entonces, digamos que especificamos esto como nuestro correo electrónico.

99
00:04:42,190 --> 00:04:47,663
‫Entonces, vemos el error, "proporcione un correo electrónico válido. " ¿Okey?

100
00:04:48,660 --> 00:04:51,320
‫Así que probémoslo así porque creo que esto

101
00:04:51,320 --> 00:04:53,120
‫tampoco debería ser válido.

102
00:04:53,120 --> 00:04:55,043
‫Quizás lo sea, pero veamos.

103
00:04:56,170 --> 00:04:57,840
‫Y sí, en realidad no es

104
00:04:57,840 --> 00:05:01,050
‫porque no haya nombres de dominio con una sola letra, ¿de acuerdo?

105
00:05:01,050 --> 00:05:03,990
‫Entonces, este validador es bastante específico, por lo

106
00:05:03,990 --> 00:05:05,890
‫que es realmente bueno.

107
00:05:05,890 --> 00:05:09,080
‫Ahora bien, si lo hacemos así, por supuesto que debería funcionar.

108
00:05:09,080 --> 00:05:11,000
‫Pero de todos modos, lo que

109
00:05:11,000 --> 00:05:13,860
‫queríamos probar aquí son estas contraseñas diferentes, ¿de acuerdo?

110
00:05:13,860 --> 00:05:15,460
‫Y ahora recuerdo que

111
00:05:15,460 --> 00:05:18,493
‫en realidad no creamos un mensaje de error, creo.

112
00:05:19,430 --> 00:05:21,070
‫Y sí, no lo hicimos.

113
00:05:21,070 --> 00:05:22,993
‫Y entonces, agreguemos eso aquí también.

114
00:05:25,120 --> 00:05:26,113
‫Entonces mensaje,

115
00:05:28,510 --> 00:05:29,510
‫no es lo

116
00:05:30,930 --> 00:05:31,803
‫mismo.

117
00:05:32,900 --> 00:05:33,733
‫Bueno.

118
00:05:35,580 --> 00:05:38,390
‫Así que agreguemos algo aquí, no importa.

119
00:05:38,390 --> 00:05:42,613
‫Y ahora, las contraseñas no son las mismas, ¿de acuerdo?

120
00:05:43,460 --> 00:05:45,233
‫Tan perfecto.

121
00:05:45,233 --> 00:05:48,333
‫Y ahora, por supuesto, nuestra validación debería aprobarse.

122
00:05:49,640 --> 00:05:53,690
‫Y de hecho, lo es y creamos nuestro nuevo usuario.

123
00:05:53,690 --> 00:05:55,900
‫Vayamos a Compass aquí,

124
00:05:55,900 --> 00:05:58,640
‫echemos un vistazo y luego elimínelo para

125
00:05:58,640 --> 00:06:02,953
‫que luego pueda crear más usuarios con el mismo correo electrónico.

126
00:06:04,330 --> 00:06:05,163
‫¿Está bien?

127
00:06:05,163 --> 00:06:07,310
‫Y no queremos toda esta basura aquí de

128
00:06:07,310 --> 00:06:09,990
‫todos modos, así que todos estos usuarios de prueba, ¿de acuerdo?

129
00:06:09,990 --> 00:06:13,330
‫Pero ahora, el siguiente paso es cifrar estas contraseñas simples

130
00:06:13,330 --> 00:06:15,560
‫que estamos almacenando en nuestra base

131
00:06:15,560 --> 00:06:17,570
‫de datos en este momento.

132
00:06:17,570 --> 00:06:19,940
‫Entonces, como mencioné en el último

133
00:06:19,940 --> 00:06:21,950
‫video, cuando trabajamos con

134
00:06:21,950 --> 00:06:24,220
‫autenticación, uno de los principios más

135
00:06:24,220 --> 00:06:29,090
‫fundamentales es nunca almacenar contraseñas simples en una base de datos, ¿de acuerdo?

136
00:06:29,090 --> 00:06:33,170
‫Entonces eso es algo que no es absolutamente aceptable, ¿de acuerdo?

137
00:06:33,170 --> 00:06:36,650
‫Así que siempre deberíamos cifrar las contraseñas de los usuarios porque imagina

138
00:06:36,650 --> 00:06:38,510
‫que, por alguna razón, un

139
00:06:38,510 --> 00:06:41,250
‫pirata informático obtiene acceso a la base de datos.

140
00:06:41,250 --> 00:06:44,880
‫Si luego las contraseñas se almacenan en texto sin formato, entonces

141
00:06:44,880 --> 00:06:47,550
‫puede simplemente iniciar sesión como cualquier usuario y

142
00:06:47,550 --> 00:06:49,720
‫luego hacer lo que realmente quiera

143
00:06:49,720 --> 00:06:52,730
‫y causar mucho daño en algunos casos, ¿de acuerdo?

144
00:06:52,730 --> 00:06:55,770
‫Y, por lo tanto, debemos evitarlo absolutamente.

145
00:06:55,770 --> 00:06:58,563
‫Y entonces, sigamos adelante e implementemos esto.

146
00:06:59,870 --> 00:07:03,610
‫Ahora bien, ¿cuál es el mejor lugar para hacer eso?

147
00:07:03,610 --> 00:07:07,270
‫Bueno, yo diría que el modelo es siempre el mejor

148
00:07:07,270 --> 00:07:10,160
‫lugar para hacer este tipo de funcionalidad.

149
00:07:10,160 --> 00:07:12,110
‫Entonces, en este caso, el cifrado porque

150
00:07:12,110 --> 00:07:14,960
‫realmente tiene que ver con los datos en sí, por

151
00:07:14,960 --> 00:07:16,730
‫lo que debería estar en

152
00:07:16,730 --> 00:07:19,070
‫el modelo y no en el controlador, ¿de acuerdo?

153
00:07:19,070 --> 00:07:22,022
‫Así que, de nuevo, tenga en cuenta la filosofía de los

154
00:07:22,022 --> 00:07:24,040
‫modelos gordos y los controladores delgados.

155
00:07:24,040 --> 00:07:24,873
‫¿Está bien?

156
00:07:27,260 --> 00:07:31,170
‫Entonces, ¿cómo vamos a implementar ahora este cifrado?

157
00:07:31,170 --> 00:07:33,660
‫Bueno, este es otro caso de uso

158
00:07:33,660 --> 00:07:36,050
‫perfecto para usar el middleware Mongoose.

159
00:07:36,050 --> 00:07:37,430
‫Y el que

160
00:07:37,430 --> 00:07:39,210
‫usaremos es un middleware pre-guardado.

161
00:07:39,210 --> 00:07:42,630
‫Básicamente, documente el middleware, ¿de acuerdo?

162
00:07:42,630 --> 00:07:47,630
‫Entonces, recuerde que lo definimos en el esquema, ¿de acuerdo?

163
00:07:47,760 --> 00:07:50,130
‫Y en este caso, queremos establecer

164
00:07:50,130 --> 00:07:52,928
‫un pre-hook, entonces un pre-middleware al guardar, ¿de acuerdo?

165
00:07:52,928 --> 00:07:54,490
‫así que un pre-middleware para guardar, ¿de acuerdo?

166
00:07:54,490 --> 00:07:56,750
‫Y la razón por la que lo

167
00:07:56,750 --> 00:07:58,320
‫estamos haciendo así es

168
00:07:58,320 --> 00:08:01,240
‫que la función de middleware que vamos a especificar aquí,

169
00:08:01,240 --> 00:08:03,660
‫por lo que el cifrado, ocurrirá entre el

170
00:08:03,660 --> 00:08:05,990
‫momento en que recibimos esos datos y el

171
00:08:05,990 --> 00:08:09,340
‫momento en que realmente persisten en el base de datos, ¿de acuerdo?

172
00:08:09,340 --> 00:08:12,200
‫Ahí es donde se ejecuta el middleware de pre-guardado.

173
00:08:12,200 --> 00:08:15,600
‫Entre obtener los datos y guardarlos en la base de datos.

174
00:08:15,600 --> 00:08:19,210
‫Y ese es el momento perfecto para manipular los datos.

175
00:08:19,210 --> 00:08:20,420
‫¿Está bien?

176
00:08:20,420 --> 00:08:21,253
‫Entonces,

177
00:08:22,480 --> 00:08:26,010
‫una función, y luego recuerde que tenemos acceso

178
00:08:26,010 --> 00:08:29,740
‫a la siguiente función para llamar al siguiente middleware.

179
00:08:29,740 --> 00:08:33,220
‫Bien, ahora solo queremos cifrar la contraseña

180
00:08:33,220 --> 00:08:37,400
‫si el campo de contraseña se ha actualizado, ¿de acuerdo?

181
00:08:37,400 --> 00:08:40,900
‫Entonces, básicamente, solo cuando realmente se cambia la contraseña o también

182
00:08:40,900 --> 00:08:43,370
‫cuando se crea una nueva, ¿de acuerdo?

183
00:08:43,370 --> 00:08:46,890
‫Porque imagina que el usuario solo está actualizando el correo electrónico.

184
00:08:46,890 --> 00:08:48,340
‫Entonces, en ese caso,

185
00:08:48,340 --> 00:08:51,760
‫por supuesto, no queremos volver a cifrar la contraseña, ¿verdad?

186
00:08:51,760 --> 00:08:54,420
‫Y entonces podemos hacer eso con Mongoose.

187
00:08:54,420 --> 00:08:58,130
‫Y entonces vamos a decir, si y luego esto, que

188
00:08:58,130 --> 00:09:00,840
‫se refiere al documento actual, ¿verdad?

189
00:09:00,840 --> 00:09:03,070
‫Y así, en este caso, al usuario actual

190
00:09:03,070 --> 00:09:04,583
‫y luego se modifica.

191
00:09:06,690 --> 00:09:07,523
‫¿Okey?

192
00:09:07,523 --> 00:09:10,670
‫Entonces tenemos un método en todos los documentos que podemos

193
00:09:10,670 --> 00:09:13,260
‫usar si se ha modificado cierto campo.

194
00:09:13,260 --> 00:09:16,270
‫Y aquí, necesitamos pasar el nombre del campo,

195
00:09:16,270 --> 00:09:18,773
‫entonces "contraseña. " ¿Okey?

196
00:09:18,773 --> 00:09:21,080
‫Básicamente, lo que queremos hacer aquí

197
00:09:21,080 --> 00:09:24,440
‫es decir que si la contraseña no ha sido modificada,

198
00:09:24,440 --> 00:09:27,540
‫entonces no, en ese caso, simplemente regresemos de esta

199
00:09:27,540 --> 00:09:30,520
‫función y no ejecutemos ninguno de los otros códigos

200
00:09:30,520 --> 00:09:32,320
‫que están aquí y luego

201
00:09:33,160 --> 00:09:34,863
‫llamemos el próximo middleware.

202
00:09:35,834 --> 00:09:36,667
‫¿Okey?

203
00:09:37,930 --> 00:09:41,170
‫De nuevo, si la contraseña no se ha modificado,

204
00:09:41,170 --> 00:09:42,810
‫salgamos de esta función

205
00:09:42,810 --> 00:09:44,600
‫y llamemos al siguiente middleware.

206
00:09:44,600 --> 00:09:46,770
‫De lo contrario, ejecutaremos el código

207
00:09:46,770 --> 00:09:48,580
‫que voy a poner aquí.

208
00:09:48,580 --> 00:09:51,270
‫Y ahora finalmente es el momento de

209
00:09:51,270 --> 00:09:55,200
‫cifrar, o como también podemos decir, de hash la contraseña, ¿de acuerdo?

210
00:09:55,200 --> 00:09:58,490
‫Entonces verá el término "hash" o "hash" todo

211
00:09:58,490 --> 00:10:01,890
‫el tiempo y eso básicamente significa cifrado también, ¿de acuerdo?

212
00:10:01,890 --> 00:10:05,440
‫Ahora vamos a hacer este cifrado, o

213
00:10:05,440 --> 00:10:08,580
‫hash, utilizando un algoritmo hash

214
00:10:08,580 --> 00:10:13,230
‫muy conocido, bien estudiado y muy popular llamado bcrypt.

215
00:10:13,230 --> 00:10:14,290
‫¿Okey?

216
00:10:14,290 --> 00:10:18,200
‫Entonces, este algoritmo primero saltará y luego codificará nuestra contraseña

217
00:10:18,200 --> 00:10:21,130
‫para que sea realmente fuerte para protegerla contra

218
00:10:21,130 --> 00:10:23,760
‫ataques de fuerza bruta, ¿de acuerdo?

219
00:10:23,760 --> 00:10:25,280
‫Y esa es la razón

220
00:10:25,280 --> 00:10:27,600
‫por la que el cifrado debe ser realmente sólido.

221
00:10:27,600 --> 00:10:30,360
‫Porque los ataques de fuerza bruta

222
00:10:30,360 --> 00:10:34,040
‫podrían intentar adivinar ciertas contraseñas si no están realmente cifradas.

223
00:10:34,040 --> 00:10:37,990
‫Y recuerde cómo dije que bcrypt eliminará nuestra contraseña y

224
00:10:37,990 --> 00:10:40,950
‫eso solo significa que agregará una cadena aleatoria

225
00:10:40,950 --> 00:10:44,500
‫a la contraseña para que dos contraseñas iguales no

226
00:10:44,500 --> 00:10:47,430
‫generen el mismo hash, ¿de acuerdo?

227
00:10:47,430 --> 00:10:48,490
‫¿Tener sentido?

228
00:10:48,490 --> 00:10:51,520
‫Ahora no voy a entrar en todos los detalles criptográficos

229
00:10:51,520 --> 00:10:53,940
‫sobre cómo funciona esto realmente entre bastidores

230
00:10:53,940 --> 00:10:56,850
‫y por qué necesitamos un sistema tan complejo, ¿de acuerdo?

231
00:10:56,850 --> 00:11:00,140
‫Pero, por supuesto, puede leer todo lo que quiera sobre bcrypt en línea.

232
00:11:00,140 --> 00:11:02,830
‫Realmente hay un montón de cosas interesantes

233
00:11:02,830 --> 00:11:05,290
‫por descubrir allí, ¿de acuerdo?

234
00:11:05,290 --> 00:11:09,270
‫De todos modos, sigamos adelante y usemos el paquete

235
00:11:09,270 --> 00:11:12,133
‫bcrypt js para usar este algoritmo.

236
00:11:13,790 --> 00:11:14,623
‫Entonces, entonces

237
00:11:15,560 --> 00:11:16,393
‫npm install

238
00:11:16,393 --> 00:11:17,660
‫entonces npm install

239
00:11:19,156 --> 00:11:21,655
‫bcryptjs.

240
00:11:21,655 --> 00:11:22,488
‫¿Okey?

241
00:11:22,488 --> 00:11:25,410
‫Y esto básicamente es una implementación bcrypt

242
00:11:25,410 --> 00:11:26,713
‫para Javascript.

243
00:11:27,650 --> 00:11:28,750
‫¿Okey?

244
00:11:28,750 --> 00:11:30,720
‫Regresemos a nuestra terminal principal y luego

245
00:11:32,550 --> 00:11:34,513
‫sigamos adelante e importémoslo aquí.

246
00:11:36,092 --> 00:11:40,820
‫Y este solo se llama por defecto bcrypt, ¿de acuerdo?

247
00:11:40,820 --> 00:11:41,873
‫Y no bcryptjs.

248
00:11:42,889 --> 00:11:45,889
‫(clic del teclado) Muy

249
00:11:49,330 --> 00:11:50,163
‫bien.

250
00:11:53,360 --> 00:11:54,193
‫Está bien.

251
00:11:54,193 --> 00:11:56,033
‫Y ahora, usémoslo realmente.

252
00:11:56,970 --> 00:12:00,293
‫Entonces, queremos decir que esta contraseña de punto, por lo

253
00:12:01,370 --> 00:12:03,510
‫que la contraseña actual en este

254
00:12:04,590 --> 00:12:07,381
‫documento debe ser igual a bcrypt dot hash

255
00:12:07,381 --> 00:12:10,214
‫debe ser igual a bcrypt dot hash y

256
00:12:11,600 --> 00:12:13,100
‫luego nuestra contraseña actual.

257
00:12:14,640 --> 00:12:15,473
‫¿Okey?

258
00:12:15,473 --> 00:12:19,600
‫Y luego aquí necesitamos especificar un parámetro de costo, ¿de acuerdo?

259
00:12:19,600 --> 00:12:22,100
‫Y en realidad podríamos hacer esto de dos formas.

260
00:12:22,100 --> 00:12:25,700
‫Entonces, la primera forma será generar manualmente la sal, de

261
00:12:25,700 --> 00:12:27,740
‫modo que esa cadena aleatoria básicamente

262
00:12:27,740 --> 00:12:29,727
‫se agregue a nuestra

263
00:12:29,727 --> 00:12:33,770
‫contraseña y luego use esa sal aquí en esta función hash.

264
00:12:33,770 --> 00:12:34,603
‫¿Está bien?

265
00:12:34,603 --> 00:12:36,480
‫Pero en cambio, para hacerlo un poco

266
00:12:36,480 --> 00:12:39,260
‫más fácil, también podemos simplemente pasar un parámetro de costo

267
00:12:39,260 --> 00:12:40,620
‫a esta función aquí.

268
00:12:40,620 --> 00:12:42,920
‫Y eso es básicamente una

269
00:12:42,920 --> 00:12:47,360
‫medida de cuán intensiva será la CPU esta operación, ¿de acuerdo?

270
00:12:47,360 --> 00:12:50,230
‫Y creo que el valor predeterminado aquí es 10, pero

271
00:12:50,230 --> 00:12:53,130
‫ahora mismo es un poco mejor usar 12 porque las

272
00:12:53,130 --> 00:12:55,810
‫computadoras se han vuelto cada vez más poderosas.

273
00:12:55,810 --> 00:12:58,800
‫Entonces, como hace 20 años, podría haber usado ocho

274
00:12:58,800 --> 00:13:01,170
‫aquí y luego un poco más tarde

275
00:13:01,170 --> 00:13:04,670
‫que 10, pero ahora mismo, en este momento, es mejor usar 12.

276
00:13:04,670 --> 00:13:06,610
‫Entonces, cuanto más alto

277
00:13:06,610 --> 00:13:09,610
‫sea este costo aquí, básicamente, más CPU será

278
00:13:09,610 --> 00:13:13,350
‫el proceso y mejor se cifrará la contraseña, ¿de acuerdo?

279
00:13:13,350 --> 00:13:15,070
‫Y, por supuesto, podríamos ir

280
00:13:15,070 --> 00:13:17,750
‫aún más alto, pero luego tomaría demasiado tiempo, ¿de acuerdo?

281
00:13:17,750 --> 00:13:20,330
‫Y te lo mostraré en un segundo.

282
00:13:20,330 --> 00:13:21,163
‫¿Okey?

283
00:13:21,163 --> 00:13:22,910
‫Pero por ahora,

284
00:13:22,910 --> 00:13:26,060
‫terminemos esto porque queda una cosa aquí.

285
00:13:26,060 --> 00:13:29,040
‫Entonces, este hash aquí es en realidad la versión

286
00:13:29,040 --> 00:13:31,440
‫asincrónica, pero también hay una versión sincrónica.

287
00:13:31,440 --> 00:13:33,960
‫Pero como ya sabe, no queremos usar

288
00:13:33,960 --> 00:13:35,313
‫la versión síncrona

289
00:13:35,313 --> 00:13:38,810
‫porque eso bloqueará el bucle de eventos y luego evitará

290
00:13:38,810 --> 00:13:41,000
‫que otros usuarios usen la aplicación.

291
00:13:41,000 --> 00:13:43,350
‫Así como aprendimos al principio.

292
00:13:43,350 --> 00:13:45,230
‫Y entonces, por supuesto,

293
00:13:45,230 --> 00:13:48,130
‫queremos usar la versión asincrónica que es esta.

294
00:13:48,130 --> 00:13:50,210
‫Y esto luego devolverá

295
00:13:50,210 --> 00:13:53,860
‫una promesa y esa promesa, por supuesto, debemos esperar.

296
00:13:53,860 --> 00:13:58,860
‫Entonces, necesitamos usar await y luego decir que esta función

297
00:13:58,960 --> 00:14:02,513
‫es una función asíncrona, como esta.

298
00:14:04,730 --> 00:14:06,860
‫Entonces, recapitulemos eso aquí.

299
00:14:06,860 --> 00:14:09,780
‫Por lo tanto, queremos configurar nuestra contraseña

300
00:14:09,780 --> 00:14:14,780
‫actual básicamente para cifrar esta versión de la contraseña original con un costo

301
00:14:14,780 --> 00:14:17,500
‫de 12, no para que sea

302
00:14:17,500 --> 00:14:21,690
‫demasiado fácil romper la contraseña, pero también para que la aplicación

303
00:14:21,690 --> 00:14:25,423
‫no tarde demasiado en cifrar la contraseña. ¿está bien?

304
00:14:25,423 --> 00:14:27,920
‫Entonces, con esto, encriptamos nuestra contraseña y

305
00:14:27,920 --> 00:14:30,070
‫ahora, al final, lo que tenemos

306
00:14:30,070 --> 00:14:33,840
‫que hacer es básicamente eliminar la contraseña de confirmación, ¿de acuerdo?

307
00:14:33,840 --> 00:14:35,670
‫Porque en este momento,

308
00:14:35,670 --> 00:14:38,663
‫solo tenemos la contraseña real hash, ¿verdad?

309
00:14:40,560 --> 00:14:42,489
‫Entonces, esta contraseña de punto confirma,

310
00:14:42,489 --> 00:14:43,643
‫Entonces, esta

311
00:14:43,643 --> 00:14:45,980
‫contraseña de punto confirma, y cómo básicamente

312
00:14:45,980 --> 00:14:48,740
‫eliminamos el campo, para que no persista en

313
00:14:48,740 --> 00:14:51,440
‫la base de datos es establecerlo como indefinido.

314
00:14:51,440 --> 00:14:52,400
‫¿Está bien?

315
00:14:52,400 --> 00:14:55,970
‫Entonces, realmente solo necesitamos esta contraseña confirmada aquí

316
00:14:55,970 --> 00:14:58,950
‫para la validación que implementamos antes.

317
00:14:58,950 --> 00:15:00,730
‫Así que solo para asegurarse

318
00:15:00,730 --> 00:15:03,160
‫de que el usuario haya ingresado dos

319
00:15:03,160 --> 00:15:06,660
‫contraseñas iguales para que no cometa ningún error con su contraseña.

320
00:15:06,660 --> 00:15:07,590
‫¿Derecha?

321
00:15:07,590 --> 00:15:10,300
‫Entonces, después de que esta validación fue

322
00:15:10,300 --> 00:15:13,060
‫exitosa, en realidad ya no necesitamos este campo, por

323
00:15:13,060 --> 00:15:16,710
‫lo que realmente no queremos conservarlo en la base de datos.

324
00:15:16,710 --> 00:15:20,130
‫Y es por eso que simplemente lo configuramos aquí como indefinido.

325
00:15:20,130 --> 00:15:21,150
‫¿Está bien?

326
00:15:21,150 --> 00:15:23,220
‫Ahora puede preguntarse por qué funciona

327
00:15:23,220 --> 00:15:25,920
‫esto porque en realidad establecemos la confirmación de

328
00:15:25,920 --> 00:15:27,800
‫contraseña como obligatoria, ¿verdad?

329
00:15:27,800 --> 00:15:30,750
‫Pero eso simplemente significa que es una entrada requerida, no

330
00:15:30,750 --> 00:15:33,650
‫que se requiera que se conserve en la base

331
00:15:33,650 --> 00:15:35,149
‫de datos, ¿de acuerdo?

332
00:15:35,149 --> 00:15:36,982
‫a la base de datos, ¿de acuerdo?

333
00:15:38,393 --> 00:15:42,390
‫Ahora, solo para terminar, por supuesto, también debemos llamar a continuación.

334
00:15:42,390 --> 00:15:43,240
‫¿Okey?

335
00:15:43,240 --> 00:15:44,290
‫Vamos a salvarlo.

336
00:15:45,640 --> 00:15:47,440
‫Y de hecho, voy a agregar algunos

337
00:15:47,440 --> 00:15:49,370
‫comentarios aquí para que quede muy claro para ustedes.

338
00:15:49,370 --> 00:15:52,400
‫Entonces, básicamente, lo que hace es ejecutar esta

339
00:15:54,180 --> 00:15:55,050
‫función

340
00:15:56,160 --> 00:15:57,190
‫solo si la

341
00:15:58,930 --> 00:16:00,533
‫contraseña se modificó realmente.

342
00:16:05,070 --> 00:16:05,903
‫Luego, aquí,

343
00:16:08,840 --> 00:16:11,803
‫hash la contraseña con un costo de 12.

344
00:16:14,785 --> 00:16:16,300
‫Y luego,

345
00:16:16,300 --> 00:16:19,443
‫elimine el campo de confirmación de contraseña.

346
00:16:20,750 --> 00:16:21,583
‫Bueno.

347
00:16:21,583 --> 00:16:24,453
‫Y ahora, probemos esto.

348
00:16:25,660 --> 00:16:29,590
‫Y ahora crearé un nuevo usuario con exactamente estos datos

349
00:16:29,590 --> 00:16:32,470
‫y ahora echemos un vistazo al resultado.

350
00:16:32,470 --> 00:16:36,460
‫Y de hecho, ahora obtenemos esta contraseña de aspecto muy extraño

351
00:16:36,460 --> 00:16:40,163
‫que de hecho es la versión encriptada de pass1234.

352
00:16:41,410 --> 00:16:45,580
‫Y también, como puede ver, la confirmación de contraseña ya no está aquí.

353
00:16:45,580 --> 00:16:46,413
‫¿Okey?

354
00:16:46,413 --> 00:16:48,930
‫Y así, así, ahora almacenamos a los usuarios de

355
00:16:48,930 --> 00:16:51,353
‫forma segura en nuestra base de datos.

356
00:16:52,280 --> 00:16:55,310
‫Permítanme ahora mostrarles cómo funcionará si, por

357
00:16:55,310 --> 00:16:58,233
‫ejemplo, lo configuramos en 16 aquí.

358
00:17:00,740 --> 00:17:02,540
‫Y necesito cambiar el correo electrónico aquí.

359
00:17:03,540 --> 00:17:07,120
‫Y eso debería llevar mucho tiempo y no estoy

360
00:17:07,120 --> 00:17:09,180
‫seguro de poder esperar.

361
00:17:09,180 --> 00:17:12,490
‫Oh, en realidad tomó como cuatro segundos y medio.

362
00:17:12,490 --> 00:17:17,320
‫Pero eso es demasiado, creo, ¿de acuerdo?

363
00:17:17,320 --> 00:17:18,980
‫Entonces, volvamos a establecerlo

364
00:17:18,980 --> 00:17:20,330
‫en 12

365
00:17:21,410 --> 00:17:24,507
‫y eso debería ser mejor, ¿de acuerdo?

366
00:17:24,507 --> 00:17:26,670
‫Y ahora, de nuevo, eliminemos

367
00:17:26,670 --> 00:17:29,630
‫estos usuarios aquí que acabamos de crear.

368
00:17:29,630 --> 00:17:32,110
‫Y, de hecho, necesito deshacerme de

369
00:17:32,110 --> 00:17:36,000
‫este primero porque todavía tiene la contraseña en texto sin formato.

370
00:17:36,000 --> 00:17:38,090
‫Por lo tanto, este usuario

371
00:17:38,090 --> 00:17:40,370
‫no funcionará cuando comencemos a iniciar sesión

372
00:17:40,370 --> 00:17:42,621
‫en usuarios en función de su contraseña.

373
00:17:42,621 --> 00:17:44,250
‫¿Okey?

374
00:17:44,250 --> 00:17:45,743
‫Así que deshagámonos de esto.

375
00:17:52,780 --> 00:17:54,060
‫¿Okey?

376
00:17:54,060 --> 00:17:56,170
‫Y también lo que quería mostrarles

377
00:17:57,510 --> 00:17:59,880
‫aquí es que pusimos exactamente la misma

378
00:17:59,880 --> 00:18:02,390
‫contraseña para estos dos usuarios que creamos, ¿verdad?

379
00:18:02,390 --> 00:18:04,520
‫Pero ves que la

380
00:18:04,520 --> 00:18:07,630
‫contraseña encriptada es realmente muy diferente, ¿verdad?

381
00:18:07,630 --> 00:18:09,820
‫Y ese es el poder de agregar sal a

382
00:18:09,820 --> 00:18:11,043
‫la contraseña antes de aplicarla.

383
00:18:12,220 --> 00:18:13,060
‫¿Está bien?

384
00:18:13,060 --> 00:18:17,250
‫Así que, de nuevo, implementamos una gestión de contraseñas

385
00:18:17,250 --> 00:18:19,313
‫muy segura y buena.

