﻿1
00:00:01,054 --> 00:00:04,060
‫-: En esta lección, permitiremos que el usuario

2
00:00:04,060 --> 00:00:07,283
‫que ha iniciado sesión actualmente manipule sus datos de usuario.

3
00:00:09,020 --> 00:00:11,910
‫Y ahora, al implementar actualizaciones de usuarios,

4
00:00:11,910 --> 00:00:14,880
‫realmente estamos dejando el dominio de autenticación y

5
00:00:14,880 --> 00:00:19,030
‫nos estamos moviendo más hacia cosas relacionadas con usuarios reales, ¿de acuerdo?

6
00:00:19,030 --> 00:00:22,180
‫Entonces, en lugar de usar el controlador de

7
00:00:22,180 --> 00:00:24,840
‫autenticación ahora, implementemos esta funcionalidad de actualización

8
00:00:24,840 --> 00:00:26,743
‫directamente en su userController.

9
00:00:27,850 --> 00:00:28,970
‫Bien, tenemos

10
00:00:28,970 --> 00:00:31,710
‫un montón de controladores, así que

11
00:00:31,710 --> 00:00:35,270
‫rutas, que no están realmente implementadas aquí, ¿de acuerdo?

12
00:00:35,270 --> 00:00:37,420
‫Pero dejémoslos de lado por

13
00:00:37,420 --> 00:00:40,553
‫ahora y creemos nuestra nueva función de controlador aquí.

14
00:00:42,800 --> 00:00:45,143
‫Y este se llamará updateMe.

15
00:00:48,312 --> 00:00:51,260
‫Y nuevamente, es updateMe porque es para actualizar

16
00:00:51,260 --> 00:00:53,323
‫el usuario actualmente autenticado.

17
00:00:54,580 --> 00:00:56,620
‫Más adelante, también implementaremos esta función

18
00:00:56,620 --> 00:01:00,070
‫updateUser aquí, pero eso es para que, como un administrador,

19
00:01:00,070 --> 00:01:03,680
‫actualice todos los datos del usuario, mientras que el usuario

20
00:01:03,680 --> 00:01:07,490
‫solo puede actualizar, al menos por ahora, el nombre y la

21
00:01:07,490 --> 00:01:09,293
‫dirección de correo electrónico.

22
00:01:12,180 --> 00:01:15,900
‫Entonces, solicitud, respuesta y siguiente.

23
00:01:17,205 --> 00:01:20,205
‫(chasquido del teclado) Y en realidad estamos haciendo esto,

24
00:01:22,550 --> 00:01:25,800
‫así que actualizamos los datos del usuario, en una ruta

25
00:01:25,800 --> 00:01:29,180
‫diferente a la actualización de la contraseña del usuario, bueno,

26
00:01:29,180 --> 00:01:32,040
‫porque generalmente en una aplicación web típica siempre es

27
00:01:32,040 --> 00:01:33,773
‫así como se hace.

28
00:01:34,720 --> 00:01:36,370
‫Por lo tanto, generalmente tiene

29
00:01:36,370 --> 00:01:38,190
‫un lugar donde puede actualizar su

30
00:01:38,190 --> 00:01:40,630
‫contraseña y luego otro lugar donde puede actualizar

31
00:01:40,630 --> 00:01:43,700
‫los datos sobre el usuario o la cuenta en sí.

32
00:01:43,700 --> 00:01:46,993
‫Y aquí, básicamente, estamos siguiendo ese patrón.

33
00:01:48,592 --> 00:01:52,410
‫Entonces, nuevamente, comencemos por establecer nuestros pasos.

34
00:01:52,410 --> 00:01:54,140
‫Y lo primero que queremos

35
00:01:54,140 --> 00:01:56,090
‫hacer aquí es básicamente crear un

36
00:01:56,090 --> 00:01:58,703
‫error si el usuario intenta actualizar la contraseña.

37
00:02:01,993 --> 00:02:05,737
‫Por lo tanto, cree un error si el usuario

38
00:02:07,330 --> 00:02:10,073
‫publica básicamente datos de contraseña.

39
00:02:13,406 --> 00:02:17,980
‫Pero si no es así, simplemente tenemos que actualizar el documento de usuario.

40
00:02:20,610 --> 00:02:23,720
‫Es bastante simple y, por supuesto, comencemos con

41
00:02:23,720 --> 00:02:24,783
‫el primero.

42
00:02:26,410 --> 00:02:28,180
‫Por supuesto, habrá un

43
00:02:28,180 --> 00:02:30,220
‫cuerpo donde pasaremos los datos,

44
00:02:30,220 --> 00:02:33,933
‫y si en ese cuerpo hay datos sobre la contraseña,

45
00:02:35,890 --> 00:02:37,929
‫o una contraseña, confirme ...

46
00:02:37,929 --> 00:02:45,350
‫(llaves tintineando) Confirmar.

47
00:02:45,350 --> 00:02:49,410
‫Bueno, en ese caso, queremos volver de inmediato y

48
00:02:49,410 --> 00:02:51,833
‫crear un nuevo Apperror.

49
00:02:53,920 --> 00:02:57,110
‫Ah, y supongo que todavía no lo implementamos aquí, o

50
00:02:57,110 --> 00:02:58,780
‫realmente lo requerimos, así

51
00:02:58,780 --> 00:03:00,663
‫que vamos a tomarlo de aquí.

52
00:03:01,660 --> 00:03:02,730
‫Entonces AppError ...

53
00:03:04,360 --> 00:03:05,580
‫No está aquí,

54
00:03:05,580 --> 00:03:07,400
‫por lo que el userController ...

55
00:03:11,550 --> 00:03:13,550
‫Así que AppError, aquí vamos.

56
00:03:15,700 --> 00:03:20,700
‫Entonces 'Esta ruta no es para actualizaciones de contraseñas.

57
00:03:26,280 --> 00:03:29,623
‫'Por favor use / updateMYPassword. Básicamente, la

58
00:03:32,160 --> 00:03:34,960
‫ruta que especificamos antes.

59
00:03:34,960 --> 00:03:36,720
‫Así que actualiceMYPassword.

60
00:03:39,226 --> 00:03:42,753
‫Y luego también, un código 400 para una mala solicitud.

61
00:03:46,150 --> 00:03:48,743
‫Y probemos este de inmediato.

62
00:03:49,921 --> 00:03:51,770
‫Y para eso, solo

63
00:03:51,770 --> 00:03:54,133
‫dos cosas, primero tenemos que enviar

64
00:03:56,230 --> 00:04:00,660
‫una respuesta, así que digamos res. status (200) para okay, y

65
00:04:00,660 --> 00:04:01,993
‫luego json,

66
00:04:07,130 --> 00:04:09,070
‫agregue el status como éxito.

67
00:04:09,070 --> 00:04:11,860
‫Y luego también enviaremos el usuario actualizado, pero

68
00:04:11,860 --> 00:04:13,563
‫dejémoslo para más adelante.

69
00:04:14,610 --> 00:04:16,840
‫Así que esa es la respuesta, y ahora,

70
00:04:16,840 --> 00:04:19,893
‫por supuesto, también debemos agregar esta ruta a nuestro enrutador de usuario.

71
00:04:21,880 --> 00:04:24,993
‫Por supuesto, eso es similar a actualizar mi contraseña,

72
00:04:26,390 --> 00:04:29,663
‫por lo que el enrutador y, por supuesto, un

73
00:04:32,066 --> 00:04:32,899
‫parche,

74
00:04:35,370 --> 00:04:38,080
‫/ updateMe, nuevamente, es una ruta protegida,

75
00:04:38,080 --> 00:04:42,120
‫por lo que solo el usuario actualmente autenticado puede actualizar los

76
00:04:42,120 --> 00:04:43,603
‫datos del usuario actual.

77
00:04:45,420 --> 00:04:48,240
‫Y todo esto, por supuesto, es realmente seguro,

78
00:04:48,240 --> 00:04:51,540
‫nuevamente porque la identificación del usuario que se actualizará proviene

79
00:04:51,540 --> 00:04:53,960
‫de la solicitud. usuario, que

80
00:04:53,960 --> 00:04:58,120
‫fue configurado por este middleware de protección aquí, que a su

81
00:04:58,120 --> 00:05:01,700
‫vez tomó la idea del token web json, y

82
00:05:01,700 --> 00:05:05,180
‫dado que nadie puede cambiar la ID en ese

83
00:05:05,180 --> 00:05:07,920
‫token web json sin conocer el secreto,

84
00:05:07,920 --> 00:05:11,260
‫sabemos que la ID es segura por eso.

85
00:05:11,260 --> 00:05:13,993
‫Y por eso, aquí todo está seguro.

86
00:05:16,342 --> 00:05:18,675
‫Entonces, userController. Ponme al día.

87
00:05:21,554 --> 00:05:22,471
‫Ahora bien...

88
00:05:24,050 --> 00:05:26,003
‫Así que probemos esto ahora.

89
00:05:28,830 --> 00:05:30,883
‫Continúe y copie esto de nuevo.

90
00:05:34,530 --> 00:05:37,363
‫Y antes que nada, configuremos la autorización.

91
00:05:38,300 --> 00:05:41,520
‫Nuevamente del Bearer Token y, por supuesto, con

92
00:05:41,520 --> 00:05:43,770
‫esta variable de entorno.

93
00:05:45,788 --> 00:05:48,470
‫También debe ser una solicitud de parche

94
00:05:48,470 --> 00:05:50,653
‫y debemos especificar un cuerpo.

95
00:05:53,740 --> 00:05:56,110
‫Y quiero comenzar probándolo, causando este

96
00:05:56,110 --> 00:05:57,930
‫error, por supuesto, así que

97
00:05:57,930 --> 00:05:59,653
‫especifiquemos una contraseña y

98
00:06:06,170 --> 00:06:07,613
‫luego un nombre.

99
00:06:12,620 --> 00:06:15,883
‫Entonces, digamos que este es el nombre que queremos actualizar, así

100
00:06:17,030 --> 00:06:18,620
‫que guardemos esto aquí.

101
00:06:20,911 --> 00:06:23,361
‫Y, por supuesto, está en la carpeta Usuarios.

102
00:06:26,960 --> 00:06:28,973
‫Datos del usuario.

103
00:06:30,810 --> 00:06:32,750
‫Y de hecho creemos una nueva

104
00:06:32,750 --> 00:06:35,670
‫carpeta aquí y coloquemos las cosas relacionadas con la autenticación

105
00:06:35,670 --> 00:06:37,123
‫en su propia carpeta.

106
00:06:39,998 --> 00:06:42,960
‫Entonces aquí arriba, creamos

107
00:06:42,960 --> 00:06:47,960
‫una nueva carpeta y la llamamos Autenticación.

108
00:06:48,150 --> 00:06:49,460
‫Eso no es correcto.

109
00:06:49,460 --> 00:06:52,354
‫AH-ENTONCES-TICACIÓN.

110
00:06:52,354 --> 00:06:53,554
‫(se ríe) Así que eso es todo.

111
00:06:55,480 --> 00:06:58,593
‫Y así, la contraseña está relacionada con la autenticación,

112
00:06:59,550 --> 00:07:04,530
‫también con el restablecimiento de la contraseña, el olvido de la contraseña, el inicio

113
00:07:04,530 --> 00:07:07,193
‫de sesión y el cierre de sesión.

114
00:07:11,078 --> 00:07:13,245
‫Entonces, cerremos estos dos y ahora

115
00:07:14,440 --> 00:07:16,800
‫inicie sesión como, o en realidad

116
00:07:16,800 --> 00:07:18,600
‫creemos un nuevo usuario.

117
00:07:20,490 --> 00:07:22,043
‫Así que registremos aquí,

118
00:07:24,170 --> 00:07:28,600
‫como un usuario normal, para que podamos deshacernos de estos dos aquí.

119
00:07:28,600 --> 00:07:33,150
‫Y ahora simplemente lo llamo, bueno, prueba de nuevo, ¿de acuerdo?

120
00:07:33,150 --> 00:07:36,060
‫Y echemos un vistazo a los usuarios que tenemos actualmente

121
00:07:38,520 --> 00:07:40,100
‫en nuestra base de datos.

122
00:07:40,100 --> 00:07:41,950
‫Tenemos hello y

123
00:07:41,950 --> 00:07:43,823
‫admin, y ahora usemos test.

124
00:07:47,400 --> 00:07:49,260
‫Y siempre vuelvo a usar la misma contraseña

125
00:07:49,260 --> 00:07:50,483
‫para que sea realmente fácil.

126
00:07:52,310 --> 00:07:55,833
‫Muy bien, también necesitamos dar el nombre, llamémoslo

127
00:07:59,530 --> 00:08:01,003
‫J aquí.

128
00:08:03,180 --> 00:08:05,570
‫Y ahora, de hecho, obtenemos nuestro token, y ya

129
00:08:05,570 --> 00:08:07,120
‫hemos iniciado sesión, por lo

130
00:08:07,120 --> 00:08:09,250
‫que ahora, cuando actualizamos el usuario, eso

131
00:08:09,250 --> 00:08:12,083
‫debería ser para este usuario que acaba de iniciar sesión.

132
00:08:13,734 --> 00:08:15,770
‫Así que no estoy tratando de actualizar y,

133
00:08:15,770 --> 00:08:19,180
‫por supuesto, aún no se ha implementado ninguna actualización, por lo que no funcionará.

134
00:08:19,180 --> 00:08:21,820
‫Todo lo que quiero ver es el error

135
00:08:21,820 --> 00:08:25,713
‫que debería ocurrir porque especifiqué esta propiedad de contraseña aquí en el cuerpo.

136
00:08:27,361 --> 00:08:28,720
‫Así que probémoslo.

137
00:08:28,720 --> 00:08:31,973
‫Y aquí obtenemos este tipo de error de aspecto extraño,

138
00:08:33,190 --> 00:08:35,700
‫pero supongo que es simplemente porque en realidad

139
00:08:35,700 --> 00:08:37,150
‫no actualizamos la ruta

140
00:08:37,150 --> 00:08:40,500
‫aquí, así que recuerde que solo copié una ruta, entonces la

141
00:08:40,500 --> 00:08:42,160
‫URL, y la pegué aquí.

142
00:08:42,160 --> 00:08:46,610
‫Pero, por supuesto, necesita ser updateME.

143
00:08:46,610 --> 00:08:48,630
‫Intentémoslo de nuevo.

144
00:08:48,630 --> 00:08:51,617
‫Y ahora, de hecho, obtenemos el error que especificamos.

145
00:08:51,617 --> 00:08:53,627
‫"Esta ruta no es para actualizaciones de contraseñas.

146
00:08:53,627 --> 00:08:56,300
‫"Utilice / updateMyPassowrd. "Muy bien,

147
00:08:56,300 --> 00:08:58,450
‫esa parte está funcionando y

148
00:08:58,450 --> 00:09:01,890
‫también está funcionando que necesitamos estar autenticados.

149
00:09:01,890 --> 00:09:05,700
‫Porque digamos que no tenemos autenticación, y entonces

150
00:09:05,700 --> 00:09:08,410
‫digamos que: No Auth.

151
00:09:08,410 --> 00:09:10,330
‫Intentémoslo de nuevo ahora.

152
00:09:10,330 --> 00:09:12,867
‫Y así, de hecho, "¡No ha iniciado sesión!

153
00:09:12,867 --> 00:09:15,157
‫"Inicie sesión para obtener acceso. "Así que

154
00:09:17,300 --> 00:09:19,800
‫solo para demostrarle que nuestra autenticación también

155
00:09:19,800 --> 00:09:21,853
‫está haciendo su trabajo aquí.

156
00:09:23,260 --> 00:09:25,450
‫Pero, por supuesto, queremos nuestro Bearer

157
00:09:25,450 --> 00:09:27,933
‫Token, y ahora obtenemos ese otro error.

158
00:09:29,990 --> 00:09:32,790
‫Genial, ahora vamos a implementar

159
00:09:32,790 --> 00:09:36,943
‫el resto de la funcionalidad para el controlador updateMe.

160
00:09:38,170 --> 00:09:40,970
‫Así que actualizando el documento de usuario, podríamos

161
00:09:40,970 --> 00:09:43,910
‫intentar hacerlo con user. a salvo.

162
00:09:43,910 --> 00:09:46,860
‫Así que, al igual que antes, básicamente hacer que

163
00:09:46,860 --> 00:09:49,430
‫el usuario actualice las propiedades y, al

164
00:09:49,430 --> 00:09:51,030
‫final, guardar el documento.

165
00:09:51,030 --> 00:09:53,500
‫Pero el problema con eso es que hay

166
00:09:53,500 --> 00:09:56,320
‫algunos campos que son obligatorios y que no estamos

167
00:09:56,320 --> 00:09:57,680
‫actualizando, y luego,

168
00:09:57,680 --> 00:09:59,490
‫debido a eso, tendremos algún error.

169
00:09:59,490 --> 00:10:01,330
‫Y para demostrártelo rápidamente, déjame

170
00:10:01,330 --> 00:10:02,530
‫hacer eso.

171
00:10:03,430 --> 00:10:06,403
‫Bien, muy rápido, trayendo al usuario aquí.

172
00:10:09,490 --> 00:10:14,490
‫Así que findbyId, así que solicítalo. usuario como ya sabemos,. identificación.

173
00:10:17,540 --> 00:10:22,540
‫Y luego digamos, usuario. name = 'Jonas' y luego esperar

174
00:10:25,582 --> 00:10:27,297
‫al usuario. ahorrar.

175
00:10:30,660 --> 00:10:33,763
‫Pero nuevamente ves que esto nos dará un error entonces.

176
00:10:35,277 --> 00:10:37,320
‫Pero por ahora, por supuesto, también vamos a

177
00:10:37,320 --> 00:10:38,763
‫declararlo como una función asíncrona.

178
00:10:45,700 --> 00:10:47,970
‫Y esta bien.

179
00:10:47,970 --> 00:10:49,690
‫Así que probémoslo

180
00:10:49,690 --> 00:10:52,780
‫ahora, pero deberíamos esperar ver un error ahora.

181
00:10:52,780 --> 00:10:55,113
‫Así que, por supuesto, eliminemos

182
00:10:58,910 --> 00:11:02,560
‫este, y de hecho obtenemos: "Por favor, confirme su contraseña".

183
00:11:02,560 --> 00:11:06,380
‫Y eso es porque passwordConfirm es un campo obligatorio pero,

184
00:11:06,380 --> 00:11:08,763
‫por supuesto, no lo especificamos.

185
00:11:09,770 --> 00:11:12,940
‫Por tanto, el método seguro no es realmente la

186
00:11:12,940 --> 00:11:14,760
‫opción correcta en este caso.

187
00:11:14,760 --> 00:11:16,560
‫Entonces, en cambio, lo

188
00:11:16,560 --> 00:11:19,453
‫que podemos hacer ahora es usar findById y actualizar.

189
00:11:20,540 --> 00:11:23,560
‫Así que no podíamos usar eso antes por todas las

190
00:11:23,560 --> 00:11:25,970
‫razones que ya te expliqué varias veces.

191
00:11:25,970 --> 00:11:28,460
‫Pero ahora, dado que no estamos

192
00:11:28,460 --> 00:11:32,380
‫tratando con contraseñas, sino solo con estos datos no confidenciales como el

193
00:11:32,380 --> 00:11:36,263
‫nombre o el correo electrónico, ahora podemos usar findById y actualizar.

194
00:11:38,810 --> 00:11:40,343
‫Entonces, deshagámonos de esto.

195
00:11:42,380 --> 00:11:46,040
‫Llamémoslo también aquí updatedUser.

196
00:11:46,040 --> 00:11:48,950
‫Y luego aquí, debemos pasar no solo la identificación,

197
00:11:48,950 --> 00:11:51,400
‫sino también los datos que deben actualizarse,

198
00:11:51,400 --> 00:11:53,040
‫y luego algunas opciones.

199
00:11:53,040 --> 00:11:56,303
‫Entonces, los datos, por ahora llamémoslos x aquí, y les

200
00:11:57,650 --> 00:11:59,140
‫diré por qué en

201
00:11:59,140 --> 00:12:02,250
‫un segundo, y luego las opciones que queremos pasar.

202
00:12:02,250 --> 00:12:04,180
‫Y así es como antes,

203
00:12:04,180 --> 00:12:07,240
‫la nueva opción establecida en verdadera, de modo que

204
00:12:07,240 --> 00:12:09,090
‫devuelve el nuevo objeto,

205
00:12:09,090 --> 00:12:12,033
‫básicamente el objeto actualizado en lugar del anterior.

206
00:12:12,880 --> 00:12:16,393
‫Y los también runValidators establecidos en true.

207
00:12:17,670 --> 00:12:22,000
‫Porque de hecho queremos que los modelos validen nuestro documento.

208
00:12:22,000 --> 00:12:25,490
‫Entonces, por ejemplo, si ingresamos una dirección de correo electrónico no

209
00:12:25,490 --> 00:12:28,490
‫válida, el Validador debería detectarla y devolver un error.

210
00:12:29,770 --> 00:12:34,770
‫Ahora, ¿por qué estoy poniendo x aquí, y no simplemente solicitando. ¿cuerpo?

211
00:12:35,040 --> 00:12:37,510
‫Bueno, eso es porque en realidad no queremos

212
00:12:37,510 --> 00:12:40,010
‫actualizar todo lo que hay en el cuerpo,

213
00:12:40,010 --> 00:12:43,130
‫porque digamos que el usuario pone, en el cuerpo, el

214
00:12:43,130 --> 00:12:44,513
‫rol, por ejemplo.

215
00:12:46,550 --> 00:12:51,550
‫Podríamos tener cuerpo. rol establecido en admin, por

216
00:12:52,510 --> 00:12:55,040
‫ejemplo, y entonces esto permitiría a cualquier

217
00:12:55,040 --> 00:12:57,860
‫usuario cambiar el rol, por ejemplo, a administrador.

218
00:12:57,860 --> 00:13:00,200
‫Y, por supuesto, eso no se puede permitir.

219
00:13:00,200 --> 00:13:02,850
‫O el usuario también podría cambiar su token de

220
00:13:02,850 --> 00:13:05,350
‫reinicio, o cuando ese token de reinicio

221
00:13:05,350 --> 00:13:08,290
‫caduque, y todo eso no debería estar permitido, por supuesto.

222
00:13:08,290 --> 00:13:10,440
‫Entonces, hacer algo como esto, por

223
00:13:10,440 --> 00:13:12,520
‫supuesto, sería un gran error.

224
00:13:12,520 --> 00:13:14,773
‫Y entonces debemos asegurarnos de que el

225
00:13:14,773 --> 00:13:16,640
‫objeto que pasamos aquí, nuevamente

226
00:13:16,640 --> 00:13:19,460
‫ese objeto que contendrá los datos que se actualizarán,

227
00:13:19,460 --> 00:13:20,860
‫solo contenga el

228
00:13:20,860 --> 00:13:23,540
‫nombre y el correo electrónico, porque por ahora

229
00:13:23,540 --> 00:13:25,940
‫estos son los únicos campos que queremos

230
00:13:25,940 --> 00:13:27,623
‫permitir que se actualicen .

231
00:13:28,640 --> 00:13:31,150
‫Básicamente, queremos filtrar el cuerpo para que,

232
00:13:31,150 --> 00:13:34,370
‫al final, solo contenga el nombre y el correo electrónico

233
00:13:34,370 --> 00:13:35,610
‫y nada más.

234
00:13:35,610 --> 00:13:38,620
‫Entonces, si el usuario intenta cambiar el rol,

235
00:13:38,620 --> 00:13:40,250
‫se filtrará para

236
00:13:40,250 --> 00:13:43,483
‫que nunca llegue a nuestra base de datos.

237
00:13:44,769 --> 00:13:48,400
‫Entonces, lo que queremos hacer es básicamente crear una variable

238
00:13:48,400 --> 00:13:49,750
‫y digamos filterBody,

239
00:13:52,400 --> 00:13:56,240
‫y luego crearemos la función en un segundo, pero ya la

240
00:13:56,240 --> 00:13:58,620
‫usaremos aquí, solo para que veas

241
00:13:58,620 --> 00:14:00,420
‫cómo va a funcionar.

242
00:14:01,450 --> 00:14:03,250
‫Y luego aquí pasamos

243
00:14:03,250 --> 00:14:05,850
‫los datos, por lo que el objeto que

244
00:14:05,850 --> 00:14:09,890
‫queremos filtrar, por lo que req. body, porque ahí es donde están todos

245
00:14:09,890 --> 00:14:12,440
‫los datos, y luego pasamos un par de argumentos.

246
00:14:12,440 --> 00:14:15,170
‫Uno para cada uno de los campos que queramos mantener

247
00:14:15,170 --> 00:14:16,183
‫en el objeto.

248
00:14:17,950 --> 00:14:20,343
‫Así que queremos mantener el campo llamado nombre

249
00:14:21,400 --> 00:14:23,653
‫y el campo llamado correo electrónico.

250
00:14:25,120 --> 00:14:28,790
‫Y nuevamente, un poco más tarde, podríamos agregar más campos aquí,

251
00:14:28,790 --> 00:14:30,910
‫por ejemplo, más adelante podríamos permitir que

252
00:14:30,910 --> 00:14:32,850
‫el usuario cargue una imagen.

253
00:14:32,850 --> 00:14:35,709
‫Y, por supuesto, también necesitamos actualizar en la

254
00:14:35,709 --> 00:14:37,220
‫base de datos.

255
00:14:37,220 --> 00:14:39,010
‫Pero por ahora, todo lo que

256
00:14:39,010 --> 00:14:43,343
‫queremos mantener en el cuerpo es el nombre y el correo electrónico y filtrar el resto.

257
00:14:45,410 --> 00:14:48,067
‫Y aquí, usemos filterBody, en lugar

258
00:14:49,730 --> 00:14:51,573
‫de x, por supuesto.

259
00:14:54,400 --> 00:14:57,200
‫Y ahora lo que tenemos que hacer

260
00:14:57,200 --> 00:15:00,833
‫es implementar esta función que se encargará de filtrar el objeto.

261
00:15:02,640 --> 00:15:03,893
‫Así que hagámoslo aquí.

262
00:15:09,151 --> 00:15:09,984
‫FilterObj,

263
00:15:12,350 --> 00:15:15,050
‫que tomará un objeto y luego

264
00:15:15,050 --> 00:15:18,853
‫el resto de parámetros para todos los campos permitidos.

265
00:15:21,320 --> 00:15:23,670
‫Y entonces esto básicamente creará

266
00:15:23,670 --> 00:15:27,203
‫una matriz que contiene todos los argumentos que pasamos.

267
00:15:28,690 --> 00:15:31,750
‫Básicamente, eso se pasó después de este primero.

268
00:15:31,750 --> 00:15:36,750
‫Entonces, en ese caso, es una matriz que contiene el nombre y el correo electrónico.

269
00:15:39,610 --> 00:15:41,260
‫Entonces, lo que tenemos que

270
00:15:41,260 --> 00:15:44,560
‫hacer ahora es básicamente recorrer el objeto y, para cada elemento, verificar

271
00:15:44,560 --> 00:15:46,240
‫si es uno de los campos

272
00:15:46,240 --> 00:15:49,110
‫permitidos, y si lo es, simplemente agregarlo a un nuevo

273
00:15:49,110 --> 00:15:51,160
‫objeto, que luego regresaremos al final. .

274
00:15:51,160 --> 00:15:53,840
‫Y probablemente hay mejores formas más eficientes

275
00:15:53,840 --> 00:15:55,140
‫de implementar esto,

276
00:15:55,140 --> 00:15:56,990
‫pero hagámoslo muy rápido aquí.

277
00:15:58,810 --> 00:16:00,790
‫Así que vamos a hacer

278
00:16:00,790 --> 00:16:04,893
‫un bucle del objeto diciendo Object. claves del objeto que pasamos.

279
00:16:05,940 --> 00:16:08,210
‫Esa es una de las formas fáciles de

280
00:16:08,210 --> 00:16:09,883
‫recorrer un objeto en JavaScript.

281
00:16:12,612 --> 00:16:15,710
‫Entonces, esto aquí básicamente devuelve una matriz que contiene todos

282
00:16:15,710 --> 00:16:17,560
‫los nombres de clave, por

283
00:16:17,560 --> 00:16:19,850
‫lo que los nombres de campo de

284
00:16:19,850 --> 00:16:21,713
‫este objeto, y luego podemos recorrerlos.

285
00:16:22,570 --> 00:16:24,023
‫Entonces nuestra función de devolución de llamada.

286
00:16:24,960 --> 00:16:27,933
‫Y para cada elemento, esto es lo que haremos.

287
00:16:29,080 --> 00:16:32,680
‫Entonces, si la matriz de campos permitidos incluye

288
00:16:33,680 --> 00:16:38,680
‫el elemento actual, entonces el nombre del campo actual, entonces queremos agregar

289
00:16:38,840 --> 00:16:41,310
‫eso a un nuevo objeto.

290
00:16:41,310 --> 00:16:43,533
‫Así que creemos rápidamente ese aquí,

291
00:16:44,580 --> 00:16:47,340
‫entonces const newObj que está vacío por ahora,

292
00:16:48,540 --> 00:16:50,260
‫y al final,

293
00:16:50,260 --> 00:16:53,010
‫ese es el que vamos a devolver.

294
00:16:54,820 --> 00:16:57,500
‫Tan nuevoObj.

295
00:16:57,500 --> 00:17:00,770
‫Entonces, si el campo actual es uno de los campos

296
00:17:00,770 --> 00:17:05,770
‫permitidos, entonces newObj con el nombre de campo del campo actual, debería ser igual a

297
00:17:07,260 --> 00:17:10,970
‫lo que esté en el objeto en el elemento actual, por

298
00:17:10,970 --> 00:17:13,743
‫lo que el nombre del campo actual.

299
00:17:15,330 --> 00:17:17,593
‫Así que no lo hagas si esto

300
00:17:18,460 --> 00:17:20,740
‫parece un poco confuso, esto es nuevamente solo

301
00:17:20,740 --> 00:17:24,450
‫JavaScript estándar, no tiene nada que ver con JS o eXpress o algo

302
00:17:24,450 --> 00:17:25,593
‫por el estilo.

303
00:17:26,810 --> 00:17:29,510
‫Entonces, nuevamente, todo lo que hacemos aquí es básicamente recorrer

304
00:17:29,510 --> 00:17:32,090
‫todos los campos que están en el objeto y

305
00:17:32,090 --> 00:17:33,710
‫luego, para cada campo, verificamos

306
00:17:33,710 --> 00:17:35,700
‫si es uno de los campos permitidos.

307
00:17:35,700 --> 00:17:39,300
‫Y si es así, entonces creamos un nuevo campo en el nuevo objeto,

308
00:17:39,300 --> 00:17:40,610
‫por supuesto con el

309
00:17:40,610 --> 00:17:43,700
‫mismo nombre, por lo que aún nombre del elemento, con el

310
00:17:43,700 --> 00:17:46,317
‫mismo valor exacto que tiene en el objeto original.

311
00:17:46,317 --> 00:17:49,193
‫Y luego, al final, por supuesto, devolvemos ese.

312
00:17:51,880 --> 00:17:55,323
‫Y entonces todo esto debería estar funcionando ahora aquí.

313
00:17:56,260 --> 00:17:58,520
‫Entonces, todo lo que tenemos que

314
00:17:58,520 --> 00:18:01,603
‫hacer al final es enviar ese usuario actualizado al cliente.

315
00:18:03,040 --> 00:18:04,083
‫Entonces, usuario.

316
00:18:06,120 --> 00:18:11,120
‫Ahora, por supuesto, tenemos que poner el udatedUser aquí,

317
00:18:11,160 --> 00:18:15,400
‫guardarlo de nuevo, y ahora debería funcionar.

318
00:18:15,400 --> 00:18:17,877
‫Realmente lo que hicimos aquí fue ...

319
00:18:21,310 --> 00:18:24,003
‫Actualizamos al usuario por

320
00:18:25,450 --> 00:18:30,450
‫último, y antes de hacerlo, en realidad filtramos los

321
00:18:34,490 --> 00:18:39,303
‫nombres de campo no deseados que no pueden actualizarse.

322
00:18:40,758 --> 00:18:42,460
‫Intentémoslo ahora.

323
00:18:42,460 --> 00:18:46,423
‫Y este usuario aquí es un usuario regular, así que lo acabamos

324
00:18:47,780 --> 00:18:49,150
‫de crear, recuerda

325
00:18:49,150 --> 00:18:50,813
‫con el nombre de J.

326
00:18:51,920 --> 00:18:55,100
‫Entonces, echemos un vistazo rápido a Compass.

327
00:18:56,900 --> 00:19:00,870
‫Entonces es un usuario normal, con un nombre de J.

328
00:19:00,870 --> 00:19:02,450
‫Así que ahora actualicemos

329
00:19:02,450 --> 00:19:05,160
‫el nombre y también intentemos actualizar el rol,

330
00:19:05,160 --> 00:19:07,460
‫que de nuevo no está permitido.

331
00:19:07,460 --> 00:19:11,090
‫Pero para ver si nuestro código funciona, intentémoslo.

332
00:19:11,090 --> 00:19:14,470
‫Así que ya existe el nombre, y digamos que

333
00:19:14,470 --> 00:19:15,970
‫somos un usuario

334
00:19:15,970 --> 00:19:19,313
‫malintencionado que intenta cambiar nuestro rol a administrador.

335
00:19:20,620 --> 00:19:23,150
‫Entonces, todo está correcto, supongo, así

336
00:19:23,150 --> 00:19:25,190
‫que enviemos esto ahora,

337
00:19:25,190 --> 00:19:28,520
‫y de hecho aquí está nuestro objeto actualizado.

338
00:19:28,520 --> 00:19:32,150
‫Entonces obtenemos nuestro nuevo nombre, que es Jonas Schmedtmann, y

339
00:19:32,150 --> 00:19:35,250
‫luego el rol, que sigue siendo usuario.

340
00:19:35,250 --> 00:19:37,913
‫No actualizó el rol a administrador.

341
00:19:39,460 --> 00:19:42,380
‫Perfecto. Eso es exactamente lo que queríamos.

342
00:19:42,380 --> 00:19:46,230
‫Entonces, guarde esto y regresemos y, de hecho,

343
00:19:46,230 --> 00:19:49,513
‫acabamos de terminar este video.

344
00:19:50,590 --> 00:19:53,770
‫A continuación, implementaremos una funcionalidad para

345
00:19:53,770 --> 00:19:55,913
‫eliminar el usuario actual.

346
00:19:56,890 --> 00:20:00,730
‫Así que trabajamos en la actualización, a continuación queremos permitir que un

347
00:20:00,730 --> 00:20:03,970
‫usuario se elimine básicamente a sí mismo cuando ya no

348
00:20:03,970 --> 00:20:06,143
‫quiera ser parte de nuestra aplicación.

