﻿1
00:00:01,290 --> 00:00:03,730
‫Instructor: Muy bien, ahora creemos esos nuevos

2
00:00:03,730 --> 00:00:06,670
‫usuarios, basados en el modelo que acabamos de

3
00:00:06,670 --> 00:00:09,093
‫implementar en el último video.

4
00:00:10,630 --> 00:00:14,180
‫Por lo tanto, haremos la mayoría de las cosas

5
00:00:14,180 --> 00:00:17,350
‫relacionadas con el usuario, como crear nuevos usuarios,

6
00:00:17,350 --> 00:00:20,933
‫iniciar sesión o actualizar contraseñas en el controlador de autenticación.

7
00:00:22,190 --> 00:00:25,800
‫Entonces, todo lo que está relacionado con la autenticación, en

8
00:00:25,800 --> 00:00:28,550
‫realidad, no estará en el controlador de

9
00:00:28,550 --> 00:00:30,250
‫usuario que realmente creamos

10
00:00:30,250 --> 00:00:33,313
‫antes, sino que crearemos un controlador de autenticación.

11
00:00:35,070 --> 00:00:36,990
‫Entonces, todas las funciones

12
00:00:36,990 --> 00:00:38,943
‫relacionadas con la autenticación irán aquí.

13
00:00:41,860 --> 00:00:44,300
‫Y esto tendrá un poco más de sentido más

14
00:00:44,300 --> 00:00:46,530
‫adelante, cuando comencemos a usar todas las funciones

15
00:00:46,530 --> 00:00:48,103
‫que voy a poner aquí.

16
00:00:49,500 --> 00:00:51,560
‫Y ahora, lo primero que

17
00:00:51,560 --> 00:00:53,983
‫debemos hacer es importar nuestro usuario,

18
00:00:57,870 --> 00:01:00,610
‫entonces nuestro modelo de usuario, por supuesto,

19
00:01:00,610 --> 00:01:05,610
‫y eso está en un nivel superior, luego debería estar en modelos, y

20
00:01:07,250 --> 00:01:08,577
‫luego en userModel.

21
00:01:09,450 --> 00:01:10,283
‫Está bien.

22
00:01:12,490 --> 00:01:16,500
‫Entonces, creemos y exportemos nuestro primer controlador.

23
00:01:16,500 --> 00:01:18,347
‫Y voy a llamar a este registro.

24
00:01:20,020 --> 00:01:22,990
‫Y entonces ves que no lo llamo crear usuario, como

25
00:01:22,990 --> 00:01:25,060
‫lo hice en un controlador de

26
00:01:25,060 --> 00:01:27,300
‫recorrido, pero realmente lo llamo registro porque ese

27
00:01:27,300 --> 00:01:29,700
‫es el nombre que tiene un poco más de

28
00:01:29,700 --> 00:01:31,913
‫significado en el contexto de la autenticación.

29
00:01:33,360 --> 00:01:36,510
‫Así que será una función asíncrona, por supuesto, porque haremos

30
00:01:36,510 --> 00:01:38,973
‫algunas operaciones en la base de datos.

31
00:01:42,190 --> 00:01:44,913
‫Luego solicite, responda y luego como

32
00:01:46,000 --> 00:01:49,650
‫siempre, y luego aquí es donde creamos el nuevo usuario.

33
00:01:49,650 --> 00:01:52,573
‫Y eso es muy similar a lo que hicimos antes.

34
00:01:53,460 --> 00:01:55,590
‫Entonces, esta vez se llama newUser,

35
00:01:55,590 --> 00:01:57,070
‫y luego recuerda

36
00:01:57,070 --> 00:02:00,090
‫cómo creamos un nuevo documento basado en un modelo.

37
00:02:00,090 --> 00:02:02,210
‫Entonces usamos el nombre del modelo,

38
00:02:02,210 --> 00:02:04,610
‫por supuesto, que en este caso es

39
00:02:04,610 --> 00:02:07,163
‫Usuario, y luego usamos el método de creación.

40
00:02:08,740 --> 00:02:10,020
‫Y luego todo lo que

41
00:02:10,020 --> 00:02:12,150
‫tenemos que hacer es pasar un objeto con los datos

42
00:02:12,150 --> 00:02:14,353
‫a partir de los cuales se debe crear el usuario.

43
00:02:15,380 --> 00:02:20,093
‫Y así, al igual que antes, esos datos están realmente en req. cuerpo.

44
00:02:21,070 --> 00:02:23,430
‫Entonces, todo esto devolverá una Promesa, por

45
00:02:23,430 --> 00:02:25,920
‫lo que debemos esperar eso, y esa es

46
00:02:25,920 --> 00:02:28,683
‫la razón por la que esta es una función asincrónica.

47
00:02:30,150 --> 00:02:32,403
‫Y veo que aquí arriba, necesitamos exportaciones.

48
00:02:34,374 --> 00:02:36,740
‫Y ahora, en el

49
00:02:36,740 --> 00:02:40,310
‫siguiente paso, enviaremos ese nuevo usuario al cliente.

50
00:02:40,310 --> 00:02:45,283
‫Entonces res. status, que es 201 para creado, y

51
00:02:46,720 --> 00:02:48,453
‫luego nuestro objeto JSON.

52
00:02:52,160 --> 00:02:53,763
‫Entonces eso es éxito nuevamente,

53
00:02:55,010 --> 00:02:58,250
‫y luego nuestra propiedad de datos que nuevamente se llama

54
00:02:58,250 --> 00:02:59,690
‫un sobre aquí,

55
00:02:59,690 --> 00:03:03,510
‫por lo que una propiedad que contendrá los datos en sí.

56
00:03:03,510 --> 00:03:05,770
‫Y los datos ahora se llaman usuario,

57
00:03:05,770 --> 00:03:07,723
‫cuando antes se llamaban tour,

58
00:03:09,105 --> 00:03:12,323
‫entonces lo que vamos a enviar aquí es el newUser.

59
00:03:13,890 --> 00:03:16,270
‫Guárdelo y, antes de probar esto, recuerde

60
00:03:16,270 --> 00:03:18,810
‫que se trata de una función asíncrona, por lo

61
00:03:18,810 --> 00:03:21,393
‫que debemos pensar en el manejo de errores aquí.

62
00:03:22,500 --> 00:03:24,470
‫Entonces, ¿qué tenemos que hacer aquí?

63
00:03:24,470 --> 00:03:26,840
‫Bueno, necesitamos envolver toda esta función que

64
00:03:26,840 --> 00:03:29,770
‫acabamos de crear en la función catchAsync que creamos

65
00:03:29,770 --> 00:03:31,570
‫en la última sección.

66
00:03:32,810 --> 00:03:37,160
‫Así que recuerde cómo hicimos eso en tourController, donde todas las funciones

67
00:03:37,160 --> 00:03:39,640
‫que son asincrónicas están envueltas en esta

68
00:03:39,640 --> 00:03:42,740
‫función catchAsync para que no tengamos que escribir el

69
00:03:42,740 --> 00:03:43,900
‫bloque try

70
00:03:43,900 --> 00:03:47,640
‫catch en todas y cada una de las funciones aquí.

71
00:03:47,640 --> 00:03:49,440
‫¿Recuerdas eso de la última sección?

72
00:03:50,410 --> 00:03:52,450
‫De hecho, voy a

73
00:03:52,450 --> 00:03:55,963
‫seguir adelante y copiar esta declaración obligatoria aquí.

74
00:04:00,190 --> 00:04:02,353
‫Entonces, un poco perezoso

75
00:04:03,220 --> 00:04:07,253
‫a veces, no tengo ganas de escribir el mismo

76
00:04:08,360 --> 00:04:12,570
‫código una y otra vez, así que atrapaAsync, y luego

77
00:04:12,570 --> 00:04:16,303
‫tenemos que cerrar eso aquí mismo al final.

78
00:04:18,793 --> 00:04:20,220
‫Y ahora, todo lo

79
00:04:20,220 --> 00:04:22,393
‫que tenemos que hacer es implementar la ruta

80
00:04:22,393 --> 00:04:25,440
‫para que se pueda llamar a este controlador de registro aquí.

81
00:04:25,440 --> 00:04:27,650
‫Y entonces vayamos a nuestras

82
00:04:27,650 --> 00:04:31,400
‫userRoutes, que en realidad ya creamos en algún momento antes,

83
00:04:31,400 --> 00:04:33,923
‫y ya tenemos algunas rutas aquí.

84
00:04:34,930 --> 00:04:37,653
‫Pero en realidad voy a crear uno nuevo aquí ahora.

85
00:04:43,990 --> 00:04:46,700
‫Y como mencioné al principio de este video, el recurso

86
00:04:46,700 --> 00:04:48,700
‫del usuario es un poco diferente de

87
00:04:48,700 --> 00:04:50,290
‫todos los demás recursos.

88
00:04:50,290 --> 00:04:52,730
‫Nuevamente, porque realmente tiene que ver con todo

89
00:04:52,730 --> 00:04:54,680
‫lo relacionado con la autenticación.

90
00:04:54,680 --> 00:04:57,010
‫Y entonces tenemos un controlador diferente para

91
00:04:57,010 --> 00:05:00,410
‫eso, así que el authController, los nombres de las funciones también

92
00:05:00,410 --> 00:05:02,110
‫tienen algunos nombres diferentes,

93
00:05:02,110 --> 00:05:05,143
‫por lo que en realidad también tendremos una ruta especial.

94
00:05:08,540 --> 00:05:11,770
‫Digamos enrutador. post, y luego crearemos

95
00:05:11,770 --> 00:05:15,313
‫una ruta para el registro, entonces / signup, y luego

96
00:05:18,450 --> 00:05:20,270
‫aquí es donde usaremos esa

97
00:05:20,270 --> 00:05:22,370
‫función que acabamos de crear antes.

98
00:05:23,260 --> 00:05:24,800
‫Y, por supuesto, antes

99
00:05:24,800 --> 00:05:27,963
‫de que podamos hacer eso, debemos requerir ese controlador de autenticación.

100
00:05:29,520 --> 00:05:32,040
‫Entonces, simplemente dupliquemos esta línea

101
00:05:32,040 --> 00:05:37,040
‫aquí y reemplacemos al usuario en dos lugares, y aquí

102
00:05:37,440 --> 00:05:39,713
‫tenemos nuestro authController, y ahora

103
00:05:41,416 --> 00:05:42,716
‫usaremos eso. inscribirse.

104
00:05:44,340 --> 00:05:45,173
‫Entonces, como

105
00:05:47,050 --> 00:05:49,790
‫puede ver, el registro es realmente un punto final especial.

106
00:05:49,790 --> 00:05:51,410
‫No encaja con la arquitectura REST

107
00:05:51,410 --> 00:05:53,560
‫de la que hablamos antes, porque en este

108
00:05:53,560 --> 00:05:55,070
‫caso no tiene mucho sentido.

109
00:05:55,070 --> 00:05:57,920
‫Y recuerde cómo dijimos que en algunos

110
00:05:57,920 --> 00:06:00,030
‫casos especiales, por supuesto,

111
00:06:00,030 --> 00:06:02,690
‫podemos crear otros puntos finales que no

112
00:06:02,690 --> 00:06:07,690
‫se ajustan al 100% a esa filosofía REST que básicamente se implementa aquí.

113
00:06:07,980 --> 00:06:09,853
‫Entonces, esto aquí, por supuesto, sigue

114
00:06:10,950 --> 00:06:15,040
‫al 100% la filosofía REST, donde el nombre de la URL no tiene nada

115
00:06:15,040 --> 00:06:17,790
‫que ver con la acción que realmente se realiza.

116
00:06:17,790 --> 00:06:19,950
‫Mientras que aquí arriba, por supuesto, lo ha hecho.

117
00:06:19,950 --> 00:06:22,080
‫Entonces, el nombre de la ruta es

118
00:06:22,080 --> 00:06:23,960
‫registro porque estamos registrando usuarios.

119
00:06:23,960 --> 00:06:25,953
‫Y también aquí abajo hemos implementado

120
00:06:26,880 --> 00:06:28,760
‫todos estos warps HTTP diferentes,

121
00:06:28,760 --> 00:06:30,940
‫pero aquí para registrarse, solo necesitamos POST.

122
00:06:31,810 --> 00:06:34,773
‫Por lo tanto, realmente no podemos obtener datos del registro, o

123
00:06:35,668 --> 00:06:38,520
‫no podemos parchear un registro, así que no lo actualice.

124
00:06:38,520 --> 00:06:41,810
‫Realmente no tiene sentido, por lo que en este caso todo

125
00:06:41,810 --> 00:06:43,170
‫lo que queremos

126
00:06:43,170 --> 00:06:45,140
‫hacer es tener una ruta para

127
00:06:45,140 --> 00:06:47,160
‫el registro, donde solo podamos publicar datos.

128
00:06:47,160 --> 00:06:48,953
‫Porque nuevamente, tiene sentido

129
00:06:50,170 --> 00:06:52,370
‫enviar datos a esta ruta, para

130
00:06:52,370 --> 00:06:54,740
‫que luego se cree el nuevo usuario.

131
00:06:54,740 --> 00:06:57,820
‫Y tendremos diferentes rutas similares a esta, como

132
00:06:57,820 --> 00:07:00,240
‫para iniciar sesión, o para

133
00:07:00,240 --> 00:07:03,820
‫restablecer contraseña, y todo tipo de cosas por el estilo.

134
00:07:03,820 --> 00:07:06,003
‫Y también mantendremos estas rutas

135
00:07:07,163 --> 00:07:10,150
‫aquí para que estén en un formato más REST,

136
00:07:10,150 --> 00:07:12,930
‫porque también existe la posibilidad de que un

137
00:07:12,930 --> 00:07:15,180
‫administrador del sistema actualice o elimine

138
00:07:15,180 --> 00:07:18,370
‫u obtenga todos los usuarios en función de su ID.

139
00:07:18,370 --> 00:07:21,423
‫Pero nos ocuparemos de eso más adelante, por ahora solo queremos

140
00:07:22,620 --> 00:07:24,590
‫implementar todas las funciones que tienen que

141
00:07:24,590 --> 00:07:25,890
‫ver con la autenticación.

142
00:07:25,890 --> 00:07:28,970
‫Entonces, básicamente, funciones que solo son relevantes

143
00:07:28,970 --> 00:07:30,620
‫para el usuario.

144
00:07:30,620 --> 00:07:33,340
‫Así que no es un administrador el que va a registrar

145
00:07:33,340 --> 00:07:36,180
‫a un usuario, o no es un administrador el que va a

146
00:07:36,180 --> 00:07:38,730
‫iniciar la sesión de un usuario, sino que es el

147
00:07:38,730 --> 00:07:41,580
‫propio usuario el que se registrará o iniciará la sesión él mismo.

148
00:07:41,580 --> 00:07:45,040
‫Vale, ¿eso tiene sentido?

149
00:07:45,040 --> 00:07:46,613
‫Entonces, deberíamos tener todo en su lugar

150
00:07:47,570 --> 00:07:50,160
‫ahora, de modo que ahora debería funcionar cuando creemos nuestro nuevo usuario.

151
00:07:50,160 --> 00:07:53,830
‫Entonces, cuando nos registramos básicamente, para nuestra aplicación.

152
00:07:53,830 --> 00:07:57,270
‫Intentémoslo ahora.

153
00:07:57,270 --> 00:07:58,683
‫Copiemos esta URL,

154
00:08:01,020 --> 00:08:02,447
‫usuarios y luego, regístrate.

155
00:08:06,610 --> 00:08:08,393
‫Luego necesitamos especificar el Cuerpo,

156
00:08:11,743 --> 00:08:13,710
‫decimos sin formato y luego JSON.

157
00:08:14,640 --> 00:08:19,190
‫Ah, y también, por supuesto, no olvide configurar este

158
00:08:19,190 --> 00:08:20,720
‫en POST.

159
00:08:20,720 --> 00:08:22,223
‫Entonces, ¿qué datos necesitamos aquí?

160
00:08:25,478 --> 00:08:27,830
‫Recuerde, primero es el

161
00:08:27,830 --> 00:08:30,293
‫nombre, luego el correo electrónico, y

162
00:08:34,710 --> 00:08:39,710
‫en realidad estoy poniendo el mío aquí, luego la contraseña, así

163
00:08:46,211 --> 00:08:49,211
‫que hagamos algo aquí, realmente no importa.

164
00:08:50,360 --> 00:08:52,560
‫Y nuevamente, hablaremos sobre la administración de contraseñas

165
00:08:54,850 --> 00:08:56,330
‫un poco más tarde

166
00:08:56,330 --> 00:08:58,383
‫y, de hecho, en el siguiente video.

167
00:08:59,290 --> 00:09:01,140
‫Así que ahora este de aquí debería ser el mismo.

168
00:09:02,420 --> 00:09:04,960
‫Así que pase1234, solo como prueba.

169
00:09:04,960 --> 00:09:08,143
‫Y el recuerdo de la foto no es obligatorio, por

170
00:09:09,287 --> 00:09:11,820
‫lo que no voy a hacer eso.

171
00:09:11,820 --> 00:09:13,663
‫Y veamos ahora.

172
00:09:15,040 --> 00:09:16,133
‫Y ahora tenemos este

173
00:09:17,990 --> 00:09:20,180
‫error aquí, y eso es porque escribí mal la contraseña aquí.

174
00:09:20,180 --> 00:09:22,853
‫Bien, esa sería la forma alemana de escribirlo.

175
00:09:24,150 --> 00:09:27,373
‫Y ahora está bien.

176
00:09:28,370 --> 00:09:29,890
‫De acuerdo, y de hecho, tenemos a nuestro nuevo usuario aquí.

177
00:09:29,890 --> 00:09:33,460
‫Perfecto.

178
00:09:33,460 --> 00:09:34,580
‫Ahora digamos que intentamos hacer esto con un GET.

179
00:09:34,580 --> 00:09:38,350
‫¿Qué obtendríamos?

180
00:09:38,350 --> 00:09:39,800
‫Bueno, "Esta ruta

181
00:09:39,800 --> 00:09:42,300
‫aún no está definida", lo cual

182
00:09:42,300 --> 00:09:44,350
‫se debe a que en

183
00:09:44,350 --> 00:09:47,620
‫realidad ya definimos esta ruta aquí, así que básicamente

184
00:09:47,620 --> 00:09:50,180
‫esta parte aquí de la ruta, así

185
00:09:50,180 --> 00:09:52,910
‫que permítanme mostrarles eso rápidamente, por lo que

186
00:09:52,910 --> 00:09:55,970
‫no está en el tourController, sino en el userController.

187
00:09:55,970 --> 00:09:58,640
‫Así que básicamente tenemos getUser aquí,

188
00:09:58,640 --> 00:10:01,560
‫y luego "Esta ruta aún no está definida. "Así que ese es el que estamos obteniendo, pero,

189
00:10:01,560 --> 00:10:04,174
‫por supuesto, no

190
00:10:04,174 --> 00:10:06,024
‫estamos realmente interesados en eso.

191
00:10:07,160 --> 00:10:09,860
‫Y ahora sigamos y guardemos esto aquí, para

192
00:10:11,460 --> 00:10:13,630
‫Postman, para que podamos reutilizarlo fácilmente.

193
00:10:13,630 --> 00:10:16,613
‫Así que regístrate.

194
00:10:21,520 --> 00:10:22,513
‫Y ahora,

195
00:10:24,700 --> 00:10:26,600
‫para confirmar rápidamente, abrámoslo en Compass

196
00:10:26,600 --> 00:10:29,420
‫aquí también, y veamos que en este punto solo

197
00:10:29,420 --> 00:10:32,320
‫tenemos recorridos, así que vayamos aquí a natours, intentemos volver

198
00:10:32,320 --> 00:10:36,433
‫a cargar esto, y probablemente esté aquí arriba, y así. de hecho, ahora tenemos

199
00:10:37,490 --> 00:10:38,890
‫nuestra colección de usuarios aquí.

200
00:10:41,000 --> 00:10:44,820
‫Así que abramos eso, y de hecho, ahora tenemos

201
00:10:44,820 --> 00:10:47,120
‫nuestro primer documento aquí.

202
00:10:47,120 --> 00:10:49,470
‫Entonces, el usuario que acabamos de crear.

203
00:10:49,470 --> 00:10:51,640
‫Ahora aquí puede ver la contraseña

204
00:10:51,640 --> 00:10:54,430
‫simple y, por supuesto, eso no es lo ideal.

205
00:10:54,430 --> 00:10:57,270
‫Y, por supuesto, eso no es ideal, por lo

206
00:10:57,270 --> 00:10:59,170
‫que en una aplicación web,

207
00:10:59,170 --> 00:11:03,090
‫las contraseñas nunca deben almacenarse como simples en una base de datos.

208
00:11:03,090 --> 00:11:05,983
‫Entonces, hay mucha administración de contraseñas que debe realizarse

209
00:11:07,060 --> 00:11:10,020
‫entre bastidores, y eso es exactamente lo que haremos

210
00:11:10,020 --> 00:11:11,750
‫en el siguiente video.

