﻿1
00:00:01,054 --> 00:00:04,060
‫-: Nesta aula, vamos permitir que o

2
00:00:04,060 --> 00:00:07,283
‫usuário atualmente logado manipule seus dados de usuário.

3
00:00:09,020 --> 00:00:11,910
‫E agora, ao implementar atualizações de

4
00:00:11,910 --> 00:00:14,880
‫usuário, estamos realmente deixando o domínio de autenticação

5
00:00:14,880 --> 00:00:19,030
‫e nos movendo mais para coisas reais relacionadas ao usuário, certo?

6
00:00:19,030 --> 00:00:22,180
‫E então, em vez de usar o controlador de

7
00:00:22,180 --> 00:00:24,840
‫autenticação agora, vamos implementar essa funcionalidade de

8
00:00:24,840 --> 00:00:26,743
‫atualização direto no userController.

9
00:00:27,850 --> 00:00:28,970
‫Ok, então

10
00:00:28,970 --> 00:00:31,710
‫temos um monte de manipuladores, então,

11
00:00:31,710 --> 00:00:35,270
‫de rotas, que não estão realmente implementados aqui, ok?

12
00:00:35,270 --> 00:00:37,420
‫Mas vamos deixá-los de lado por

13
00:00:37,420 --> 00:00:40,553
‫enquanto e criar nossa nova função de manipulador aqui.

14
00:00:42,800 --> 00:00:45,143
‫E este vai se chamar updateMe.

15
00:00:48,312 --> 00:00:51,260
‫E, novamente, é updateMe porque é para atualizar

16
00:00:51,260 --> 00:00:53,323
‫o usuário autenticado no momento.

17
00:00:54,580 --> 00:00:56,620
‫Posteriormente, implementaremos também esta função

18
00:00:56,620 --> 00:01:00,070
‫updateUser aqui, mas isso serve para que um administrador

19
00:01:00,070 --> 00:01:03,680
‫atualize todos os dados do usuário, enquanto o próprio usuário

20
00:01:03,680 --> 00:01:07,490
‫só pode atualizar, pelo menos por enquanto, o nome e

21
00:01:07,490 --> 00:01:09,293
‫o endereço de e-mail.

22
00:01:12,180 --> 00:01:15,900
‫Então, solicitação, resposta e próximo.

23
00:01:17,205 --> 00:01:20,205
‫(clacking do teclado) E na verdade estamos fazendo

24
00:01:22,550 --> 00:01:25,800
‫isso, atualizando os dados do usuário, em uma

25
00:01:25,800 --> 00:01:29,180
‫rota diferente da atualização da senha do usuário, bem

26
00:01:29,180 --> 00:01:32,040
‫porque geralmente em uma aplicação web típica

27
00:01:32,040 --> 00:01:33,773
‫é sempre assim.

28
00:01:34,720 --> 00:01:36,370
‫Portanto, geralmente você tem

29
00:01:36,370 --> 00:01:38,190
‫um local onde pode atualizar

30
00:01:38,190 --> 00:01:40,630
‫sua senha e outro local onde pode

31
00:01:40,630 --> 00:01:43,700
‫atualizar dados sobre o usuário ou a própria conta.

32
00:01:43,700 --> 00:01:46,993
‫E aqui, basicamente estamos seguindo esse padrão.

33
00:01:48,592 --> 00:01:52,410
‫Então, novamente, vamos começar definindo nossos passos.

34
00:01:52,410 --> 00:01:54,140
‫E a primeira coisa que

35
00:01:54,140 --> 00:01:56,090
‫queremos fazer aqui é basicamente criar

36
00:01:56,090 --> 00:01:58,703
‫um erro se o usuário tentar atualizar a senha.

37
00:02:01,993 --> 00:02:05,737
‫Portanto, crie um erro se o usuário

38
00:02:07,330 --> 00:02:10,073
‫postar basicamente dados de senha.

39
00:02:13,406 --> 00:02:17,980
‫Mas então, se não, simplesmente precisamos atualizar o documento do usuário.

40
00:02:20,610 --> 00:02:23,720
‫Tão simples, e vamos começar com

41
00:02:23,720 --> 00:02:24,783
‫o primeiro.

42
00:02:26,410 --> 00:02:28,180
‫Claro que haverá um

43
00:02:28,180 --> 00:02:30,220
‫corpo onde vamos passar os

44
00:02:30,220 --> 00:02:33,933
‫dados, então se nesse corpo houver dados de senha, ou

45
00:02:35,890 --> 00:02:37,929
‫uma senha de confirmação ...

46
00:02:37,929 --> 00:02:45,350
‫(teclas batendo) Confirme.

47
00:02:45,350 --> 00:02:49,410
‫Bem, nesse caso, queremos retornar imediatamente e

48
00:02:49,410 --> 00:02:51,833
‫criar um novo Apperror.

49
00:02:53,920 --> 00:02:57,110
‫Ah, e acho que ainda não o implementamos

50
00:02:57,110 --> 00:02:58,780
‫aqui, ou realmente

51
00:02:58,780 --> 00:03:00,663
‫exigimos, então vamos pegá-lo daqui.

52
00:03:01,660 --> 00:03:02,730
‫Então AppError ...

53
00:03:04,360 --> 00:03:05,580
‫Não está

54
00:03:05,580 --> 00:03:07,400
‫aqui, então o userController ...

55
00:03:11,550 --> 00:03:13,550
‫Então AppError, vamos lá.

56
00:03:15,700 --> 00:03:20,700
‫Portanto, 'Esta rota não é para atualizações de senha.

57
00:03:26,280 --> 00:03:29,623
‫'Por favor, use / updateMYPassword. 'Então, basicamente

58
00:03:32,160 --> 00:03:34,960
‫a rota que especificamos antes.

59
00:03:34,960 --> 00:03:36,720
‫Portanto, atualize minha senha.

60
00:03:39,226 --> 00:03:42,753
‫E também, um código 400 para uma solicitação incorreta.

61
00:03:46,150 --> 00:03:48,743
‫E vamos experimentar este agora mesmo.

62
00:03:49,921 --> 00:03:51,770
‫E para isso apenas

63
00:03:51,770 --> 00:03:54,133
‫duas coisas, primeiro precisamos enviar de

64
00:03:56,230 --> 00:04:00,660
‫volta uma resposta, digamos res. status (200) para okay e, em

65
00:04:00,660 --> 00:04:01,993
‫seguida, json,

66
00:04:07,130 --> 00:04:09,070
‫adicione o status como sucesso.

67
00:04:09,070 --> 00:04:11,860
‫E depois enviaremos também o usuário atualizado, mas vamos

68
00:04:11,860 --> 00:04:13,563
‫deixar isso para depois.

69
00:04:14,610 --> 00:04:16,840
‫Essa é a resposta e agora, é

70
00:04:16,840 --> 00:04:19,893
‫claro, também precisamos adicionar essa rota ao nosso Roteador de usuário.

71
00:04:21,880 --> 00:04:24,993
‫É claro que isso é semelhante a atualizar

72
00:04:26,390 --> 00:04:29,663
‫minha senha, roteador e, claro, um patch, / updateMe,

73
00:04:32,066 --> 00:04:32,899
‫então,

74
00:04:35,370 --> 00:04:38,080
‫novamente, é uma rota protegida para

75
00:04:38,080 --> 00:04:42,120
‫que apenas o usuário autenticado no momento possa atualizar os

76
00:04:42,120 --> 00:04:43,603
‫dados do usuário atual.

77
00:04:45,420 --> 00:04:48,240
‫E então tudo isso é muito seguro, mais uma

78
00:04:48,240 --> 00:04:51,540
‫vez, porque o ID do usuário que será atualizado vem

79
00:04:51,540 --> 00:04:53,960
‫de uma solicitação. usuário, que

80
00:04:53,960 --> 00:04:58,120
‫foi definido por este middleware de proteção aqui, que por sua

81
00:04:58,120 --> 00:05:01,700
‫vez tirou a ideia do json web token, e

82
00:05:01,700 --> 00:05:05,180
‫como ninguém pode alterar o ID nesse json web

83
00:05:05,180 --> 00:05:07,920
‫token sem saber o segredo, sabemos que

84
00:05:07,920 --> 00:05:11,260
‫o ID é então seguro por causa disso.

85
00:05:11,260 --> 00:05:13,993
‫E por isso, tudo aqui está seguro.

86
00:05:16,342 --> 00:05:18,675
‫Então, userController. me atualize.

87
00:05:21,554 --> 00:05:22,471
‫Agora tudo bem ...

88
00:05:24,050 --> 00:05:26,003
‫Então, vamos testar isso agora.

89
00:05:28,830 --> 00:05:30,883
‫Vá em frente e copie novamente.

90
00:05:34,530 --> 00:05:37,363
‫E antes de tudo, vamos definir a autorização.

91
00:05:38,300 --> 00:05:41,520
‫Novamente do Bearer Token e, claro, com

92
00:05:41,520 --> 00:05:43,770
‫essa variável de ambiente.

93
00:05:45,788 --> 00:05:48,470
‫Também precisa ser uma solicitação de patch

94
00:05:48,470 --> 00:05:50,653
‫e precisamos especificar um corpo.

95
00:05:53,740 --> 00:05:56,110
‫E eu quero começar testando-o, causando esse

96
00:05:56,110 --> 00:05:57,930
‫erro, é claro, então vamos

97
00:05:57,930 --> 00:05:59,653
‫especificar uma senha e, em

98
00:06:06,170 --> 00:06:07,613
‫seguida, um nome.

99
00:06:12,620 --> 00:06:15,883
‫Digamos que este seja o nome que desejamos atualizar,

100
00:06:17,030 --> 00:06:18,620
‫então vamos salvá-lo aqui.

101
00:06:20,911 --> 00:06:23,361
‫E, na verdade, está na pasta Usuários.

102
00:06:26,960 --> 00:06:28,973
‫Dados do usuário.

103
00:06:30,810 --> 00:06:32,750
‫E, na verdade, vamos criar uma

104
00:06:32,750 --> 00:06:35,670
‫nova pasta aqui e colocar o material relacionado à autenticação

105
00:06:35,670 --> 00:06:37,123
‫em sua própria pasta.

106
00:06:39,998 --> 00:06:42,960
‫Então, aqui em cima,

107
00:06:42,960 --> 00:06:47,960
‫criamos uma nova pasta e a chamamos de Autenticação.

108
00:06:48,150 --> 00:06:49,460
‫Isso não é correto.

109
00:06:49,460 --> 00:06:52,354
‫AH-THEN-TICATION.

110
00:06:52,354 --> 00:06:53,554
‫(risos) Então é isso.

111
00:06:55,480 --> 00:06:58,593
‫E assim a senha está

112
00:06:59,550 --> 00:07:04,530
‫relacionada à autenticação, também redefinindo a senha, esquecendo a

113
00:07:04,530 --> 00:07:07,193
‫senha, logando e desconectando.

114
00:07:11,078 --> 00:07:13,245
‫Então, vamos fechar esses dois, e agora

115
00:07:14,440 --> 00:07:16,800
‫fazer o login como, ou na verdade vamos

116
00:07:16,800 --> 00:07:18,600
‫criar um novo usuário.

117
00:07:20,490 --> 00:07:22,043
‫Então, vamos nos inscrever

118
00:07:24,170 --> 00:07:28,600
‫aqui, como um usuário normal, para que possamos nos livrar desses dois aqui.

119
00:07:28,600 --> 00:07:33,150
‫E agora estou simplesmente chamando de, bem, teste de novo, certo?

120
00:07:33,150 --> 00:07:36,060
‫E vamos dar uma olhada nos usuários que temos atualmente

121
00:07:38,520 --> 00:07:40,100
‫em nosso banco de dados.

122
00:07:40,100 --> 00:07:41,950
‫Portanto, temos hello e

123
00:07:41,950 --> 00:07:43,823
‫admin, e agora vamos usar test.

124
00:07:47,400 --> 00:07:49,260
‫E estou sempre de novo, usando a mesma senha

125
00:07:49,260 --> 00:07:50,483
‫para tornar tudo realmente fácil.

126
00:07:52,310 --> 00:07:55,833
‫Tudo bem, precisamos fornecer o nome também, vamos chamá-lo

127
00:07:59,530 --> 00:08:01,003
‫de J aqui.

128
00:08:03,180 --> 00:08:05,570
‫E agora, de fato, recebemos nosso token, e

129
00:08:05,570 --> 00:08:07,120
‫já estamos logados, e

130
00:08:07,120 --> 00:08:09,250
‫agora, quando atualizamos o usuário, deve

131
00:08:09,250 --> 00:08:12,083
‫ser para este usuário que acabou de efetuar login.

132
00:08:13,734 --> 00:08:15,770
‫Portanto, não estou tentando atualizar

133
00:08:15,770 --> 00:08:19,180
‫e, claro, nenhuma atualização foi implementada e isso não vai funcionar.

134
00:08:19,180 --> 00:08:21,820
‫Só quero ver o erro que

135
00:08:21,820 --> 00:08:25,713
‫deve acontecer porque especifiquei essa propriedade de senha aqui no corpo.

136
00:08:27,361 --> 00:08:28,720
‫Então, vamos experimentar.

137
00:08:28,720 --> 00:08:31,973
‫E aqui temos esse tipo de erro de aparência estranha,

138
00:08:33,190 --> 00:08:35,700
‫mas acho que é simplesmente porque não atualizamos

139
00:08:35,700 --> 00:08:37,150
‫a rota aqui,

140
00:08:37,150 --> 00:08:40,500
‫então lembre-se de que apenas copiei uma rota, então a

141
00:08:40,500 --> 00:08:42,160
‫URL, e apenas colei aqui.

142
00:08:42,160 --> 00:08:46,610
‫Mas é claro, ele precisa ser updateME.

143
00:08:46,610 --> 00:08:48,630
‫Então, vamos tentar de novo.

144
00:08:48,630 --> 00:08:51,617
‫E agora realmente obtemos o erro que especificamos.

145
00:08:51,617 --> 00:08:53,627
‫"Esta rota não é para atualizações de senha.

146
00:08:53,627 --> 00:08:56,300
‫"Use / updateMyPassowrd. "Tão bom,

147
00:08:56,300 --> 00:08:58,450
‫essa parte está funcionando, e

148
00:08:58,450 --> 00:09:01,890
‫também está funcionando que precisamos ser autenticados.

149
00:09:01,890 --> 00:09:05,700
‫Porque vamos dizer que não temos autenticação, então

150
00:09:05,700 --> 00:09:08,410
‫vamos dizer que: No Auth.

151
00:09:08,410 --> 00:09:10,330
‫E então vamos tentar de novo agora.

152
00:09:10,330 --> 00:09:12,867
‫E então, de fato, "Você não está logado!

153
00:09:12,867 --> 00:09:15,157
‫"Faça login para obter acesso. "Então, apenas

154
00:09:17,300 --> 00:09:19,800
‫para provar que nossa autenticação também

155
00:09:19,800 --> 00:09:21,853
‫está fazendo seu trabalho aqui.

156
00:09:23,260 --> 00:09:25,450
‫Mas é claro, queremos nosso Símbolo

157
00:09:25,450 --> 00:09:27,933
‫de Portador, e agora recebemos aquele outro erro.

158
00:09:29,990 --> 00:09:32,790
‫Ótimo, então agora vamos implementar

159
00:09:32,790 --> 00:09:36,943
‫o resto da funcionalidade para o manipulador updateMe.

160
00:09:38,170 --> 00:09:40,970
‫Atualizando o documento do usuário, podemos tentar fazer

161
00:09:40,970 --> 00:09:43,910
‫isso com o usuário. seguro.

162
00:09:43,910 --> 00:09:46,860
‫Assim como antes, basicamente fazer com que o

163
00:09:46,860 --> 00:09:49,430
‫usuário atualize as propriedades e, no final,

164
00:09:49,430 --> 00:09:51,030
‫salve o documento.

165
00:09:51,030 --> 00:09:53,500
‫Mas o problema com isso é que

166
00:09:53,500 --> 00:09:56,320
‫existem alguns campos obrigatórios que não estamos atualizando

167
00:09:56,320 --> 00:09:57,680
‫e, por causa

168
00:09:57,680 --> 00:09:59,490
‫disso, cometeremos algum erro.

169
00:09:59,490 --> 00:10:01,330
‫E então, apenas para demonstrar rapidamente a você,

170
00:10:01,330 --> 00:10:02,530
‫deixe-me realmente fazer isso.

171
00:10:03,430 --> 00:10:06,403
‫Ok, muito rapidamente, trazendo o usuário aqui.

172
00:10:09,490 --> 00:10:14,490
‫Então, findbyId, então solicite. usuário como já sabemos,. Eu iria.

173
00:10:17,540 --> 00:10:22,540
‫E então, digamos, usuário. nome = 'Jonas' e aguarde o

174
00:10:25,582 --> 00:10:27,297
‫usuário. Salve .

175
00:10:30,660 --> 00:10:33,763
‫Mas, novamente, você verá que isso nos dará um erro.

176
00:10:35,277 --> 00:10:37,320
‫Mas, por enquanto, vamos declará-la também

177
00:10:37,320 --> 00:10:38,763
‫como uma função assíncrona.

178
00:10:45,700 --> 00:10:47,970
‫E tudo bem.

179
00:10:47,970 --> 00:10:49,690
‫Portanto, vamos testá-lo

180
00:10:49,690 --> 00:10:52,780
‫agora, mas devemos esperar um erro agora.

181
00:10:52,780 --> 00:10:55,113
‫Então, é claro, vamos nos livrar

182
00:10:58,910 --> 00:11:02,560
‫deste, e de fato obteremos: "Por favor, confirme sua senha".

183
00:11:02,560 --> 00:11:06,380
‫E isso é porque passwordConfirm é um campo obrigatório, mas

184
00:11:06,380 --> 00:11:08,763
‫é claro que não o especificamos.

185
00:11:09,770 --> 00:11:12,940
‫Portanto, o método seguro não é realmente a

186
00:11:12,940 --> 00:11:14,760
‫opção correta neste caso.

187
00:11:14,760 --> 00:11:16,560
‫Em vez disso, o que

188
00:11:16,560 --> 00:11:19,453
‫podemos fazer agora é realmente usar findById e atualizar.

189
00:11:20,540 --> 00:11:23,560
‫Portanto, não podíamos usar isso antes por todos os motivos

190
00:11:23,560 --> 00:11:25,970
‫que já expliquei a vocês várias vezes.

191
00:11:25,970 --> 00:11:28,460
‫Mas agora, como não estamos

192
00:11:28,460 --> 00:11:32,380
‫lidando com senhas, mas apenas com dados não confidenciais,

193
00:11:32,380 --> 00:11:36,263
‫como nome ou e-mail, podemos usar findById e atualizar.

194
00:11:38,810 --> 00:11:40,343
‫Então, vamos nos livrar disso.

195
00:11:42,380 --> 00:11:46,040
‫Também vamos chamá-lo aqui de updatedUser.

196
00:11:46,040 --> 00:11:48,950
‫E aqui, precisamos passar não apenas o ID, mas

197
00:11:48,950 --> 00:11:51,400
‫também os dados que devem ser atualizados e,

198
00:11:51,400 --> 00:11:53,040
‫em seguida, algumas opções.

199
00:11:53,040 --> 00:11:56,303
‫Então, os dados, por enquanto, vamos chamá-los de x aqui, e

200
00:11:57,650 --> 00:11:59,140
‫estou dizendo o porquê

201
00:11:59,140 --> 00:12:02,250
‫em um segundo, e então as opções que queremos passar.

202
00:12:02,250 --> 00:12:04,180
‫E isso é exatamente como antes,

203
00:12:04,180 --> 00:12:07,240
‫a nova opção definida como verdadeira, para que ela

204
00:12:07,240 --> 00:12:09,090
‫retorne o novo objeto,

205
00:12:09,090 --> 00:12:12,033
‫então basicamente o objeto atualizado em vez do antigo.

206
00:12:12,880 --> 00:12:16,393
‫E o runValidators também definido como true.

207
00:12:17,670 --> 00:12:22,000
‫Porque realmente queremos que os modelos validem nosso documento.

208
00:12:22,000 --> 00:12:25,490
‫Por exemplo, se colocarmos um endereço de e-mail inválido, ele deve

209
00:12:25,490 --> 00:12:28,490
‫ser detectado pelo Validador e retornar um erro.

210
00:12:29,770 --> 00:12:34,770
‫Agora, por que estou colocando x aqui, e não simplesmente pedido. corpo?

211
00:12:35,040 --> 00:12:37,510
‫Bem, isso é porque na verdade não

212
00:12:37,510 --> 00:12:40,010
‫queremos atualizar tudo que está no corpo,

213
00:12:40,010 --> 00:12:43,130
‫porque digamos que o usuário coloque, no corpo, a

214
00:12:43,130 --> 00:12:44,513
‫função, por exemplo.

215
00:12:46,550 --> 00:12:51,550
‫Nós poderíamos ter corpo. função definida como admin, por

216
00:12:52,510 --> 00:12:55,040
‫exemplo, e então isso permitiria a qualquer

217
00:12:55,040 --> 00:12:57,860
‫usuário alterar a função, por exemplo, para administrador.

218
00:12:57,860 --> 00:13:00,200
‫E é claro que isso não pode ser permitido.

219
00:13:00,200 --> 00:13:02,850
‫Ou o usuário também pode alterar seu token de

220
00:13:02,850 --> 00:13:05,350
‫redefinição, ou quando esse token de redefinição

221
00:13:05,350 --> 00:13:08,290
‫expirar, e tudo isso não deve ser permitido, é claro.

222
00:13:08,290 --> 00:13:10,440
‫Portanto, fazer algo assim seria

223
00:13:10,440 --> 00:13:12,520
‫um grande erro.

224
00:13:12,520 --> 00:13:14,773
‫E então precisamos ter certeza de

225
00:13:14,773 --> 00:13:16,640
‫que o objeto que passamos

226
00:13:16,640 --> 00:13:19,460
‫aqui, novamente aquele objeto que conterá os dados que

227
00:13:19,460 --> 00:13:20,860
‫serão atualizados, contém

228
00:13:20,860 --> 00:13:23,540
‫apenas o nome e o e-mail, porque por

229
00:13:23,540 --> 00:13:25,940
‫enquanto esses são os únicos campos que

230
00:13:25,940 --> 00:13:27,623
‫queremos permitir a atualização .

231
00:13:28,640 --> 00:13:31,150
‫Basicamente, queremos filtrar o corpo para que,

232
00:13:31,150 --> 00:13:34,370
‫no final, ele contenha apenas o nome e o e-mail

233
00:13:34,370 --> 00:13:35,610
‫e nada mais.

234
00:13:35,610 --> 00:13:38,620
‫Portanto, se o usuário tentar alterar a função,

235
00:13:38,620 --> 00:13:40,250
‫ela será filtrada para

236
00:13:40,250 --> 00:13:43,483
‫que nunca encontre seu caminho para nosso banco de dados.

237
00:13:44,769 --> 00:13:48,400
‫Então, o que queremos fazer é basicamente criar uma variável

238
00:13:48,400 --> 00:13:49,750
‫e, digamos, filterBody,

239
00:13:52,400 --> 00:13:56,240
‫e então vamos criar a função em um segundo, mas vamos

240
00:13:56,240 --> 00:13:58,620
‫já usá-la aqui, só para você

241
00:13:58,620 --> 00:14:00,420
‫ver como vai funcionar.

242
00:14:01,450 --> 00:14:03,250
‫E então aqui

243
00:14:03,250 --> 00:14:05,850
‫passamos os dados, então o objeto

244
00:14:05,850 --> 00:14:09,890
‫que queremos filtrar, então req. corpo, porque é onde estão

245
00:14:09,890 --> 00:14:12,440
‫todos os dados, e então passamos alguns argumentos.

246
00:14:12,440 --> 00:14:15,170
‫Um para cada um dos campos que queremos manter

247
00:14:15,170 --> 00:14:16,183
‫no objeto.

248
00:14:17,950 --> 00:14:20,343
‫Portanto, queremos manter o campo denominado nome

249
00:14:21,400 --> 00:14:23,653
‫e o campo denominado email.

250
00:14:25,120 --> 00:14:28,790
‫E novamente, um pouco mais tarde, podemos adicionar mais campos aqui,

251
00:14:28,790 --> 00:14:30,910
‫por exemplo, mais tarde podemos permitir que

252
00:14:30,910 --> 00:14:32,850
‫o usuário carregue uma imagem.

253
00:14:32,850 --> 00:14:35,709
‫E é claro que também precisamos atualizar o

254
00:14:35,709 --> 00:14:37,220
‫banco de dados.

255
00:14:37,220 --> 00:14:39,010
‫Mas, por enquanto, tudo o que

256
00:14:39,010 --> 00:14:43,343
‫queremos manter no corpo é o nome e o e-mail e filtrar todo o resto.

257
00:14:45,410 --> 00:14:48,067
‫E aqui, vamos usar filterBody, em vez

258
00:14:49,730 --> 00:14:51,573
‫de x, é claro.

259
00:14:54,400 --> 00:14:57,200
‫E agora o que precisamos fazer é

260
00:14:57,200 --> 00:15:00,833
‫realmente implementar esta função que cuidará de filtrar o objeto.

261
00:15:02,640 --> 00:15:03,893
‫Então, vamos fazer isso aqui.

262
00:15:09,151 --> 00:15:09,984
‫FilterObj,

263
00:15:12,350 --> 00:15:15,050
‫que pegará um objeto e então

264
00:15:15,050 --> 00:15:18,853
‫os parâmetros restantes para todos os campos permitidos.

265
00:15:21,320 --> 00:15:23,670
‫E isso criará basicamente

266
00:15:23,670 --> 00:15:27,203
‫um array contendo todos os argumentos que passamos.

267
00:15:28,690 --> 00:15:31,750
‫Então, basicamente, isso foi passado após este primeiro.

268
00:15:31,750 --> 00:15:36,750
‫Nesse caso, é um array contendo nome e e-mail.

269
00:15:39,610 --> 00:15:41,260
‫Então o que precisamos

270
00:15:41,260 --> 00:15:44,560
‫fazer agora é basicamente percorrer o objeto e para cada elemento

271
00:15:44,560 --> 00:15:46,240
‫verificar se é um dos

272
00:15:46,240 --> 00:15:49,110
‫campos permitidos e, se for, simplesmente adicioná-lo a um novo

273
00:15:49,110 --> 00:15:51,160
‫objeto, que iremos retornar no final .

274
00:15:51,160 --> 00:15:53,840
‫E provavelmente existem maneiras mais eficientes de implementar

275
00:15:53,840 --> 00:15:55,140
‫isso, mas vamos

276
00:15:55,140 --> 00:15:56,990
‫fazer isso muito rápido aqui.

277
00:15:58,810 --> 00:16:00,790
‫Então, vamos fazer um

278
00:16:00,790 --> 00:16:04,893
‫loop no objeto dizendo Object. chaves do objeto que passamos.

279
00:16:05,940 --> 00:16:08,210
‫Portanto, essa é uma das maneiras fáceis de

280
00:16:08,210 --> 00:16:09,883
‫percorrer um objeto em JavaScript.

281
00:16:12,612 --> 00:16:15,710
‫Então, isso aqui basicamente retorna um array contendo todos os

282
00:16:15,710 --> 00:16:17,560
‫nomes de chave, então os

283
00:16:17,560 --> 00:16:19,850
‫nomes dos campos deste objeto, e então

284
00:16:19,850 --> 00:16:21,713
‫podemos fazer um loop através deles.

285
00:16:22,570 --> 00:16:24,023
‫Então, nossa função de retorno de chamada.

286
00:16:24,960 --> 00:16:27,933
‫E para cada elemento, isso é o que faremos.

287
00:16:29,080 --> 00:16:32,680
‫Portanto, se a matriz de campo permitida inclui

288
00:16:33,680 --> 00:16:38,680
‫o elemento atual, ou seja, o nome do campo atual, queremos

289
00:16:38,840 --> 00:16:41,310
‫adicioná-lo a um novo objeto.

290
00:16:41,310 --> 00:16:43,533
‫Então, vamos criar esse aqui

291
00:16:44,580 --> 00:16:47,340
‫rapidamente, então const newObj que está vazio

292
00:16:48,540 --> 00:16:50,260
‫por enquanto e,

293
00:16:50,260 --> 00:16:53,010
‫no final, é o que vamos devolver.

294
00:16:54,820 --> 00:16:57,500
‫Tão novoObj.

295
00:16:57,500 --> 00:17:00,770
‫Portanto, se o campo atual for um dos campos

296
00:17:00,770 --> 00:17:05,770
‫permitidos, então newObj com o nome do campo do campo atual, deve ser igual

297
00:17:07,260 --> 00:17:10,970
‫a tudo o que está no objeto no elemento atual,

298
00:17:10,970 --> 00:17:13,743
‫portanto, o nome do campo atual.

299
00:17:15,330 --> 00:17:17,593
‫Portanto, não faça isso se parecer

300
00:17:18,460 --> 00:17:20,740
‫um pouco confuso, novamente é apenas JavaScript

301
00:17:20,740 --> 00:17:24,450
‫padrão, não tem nada a ver com JS ou eXpress ou

302
00:17:24,450 --> 00:17:25,593
‫qualquer coisa assim.

303
00:17:26,810 --> 00:17:29,510
‫Então, novamente, tudo o que fazemos aqui é basicamente percorrer

304
00:17:29,510 --> 00:17:32,090
‫todos os campos que estão no objeto e, em

305
00:17:32,090 --> 00:17:33,710
‫seguida, para cada campo,

306
00:17:33,710 --> 00:17:35,700
‫verificamos se é um dos campos permitidos.

307
00:17:35,700 --> 00:17:39,300
‫E se for, então criamos um novo campo no novo objeto,

308
00:17:39,300 --> 00:17:40,610
‫é claro com

309
00:17:40,610 --> 00:17:43,700
‫o mesmo nome, então ainda nomeia o elemento, com exatamente

310
00:17:43,700 --> 00:17:46,317
‫o mesmo valor que tem no objeto original.

311
00:17:46,317 --> 00:17:49,193
‫E então, no final, é claro, nós devolvemos aquele.

312
00:17:51,880 --> 00:17:55,323
‫E agora tudo isso deve estar funcionando aqui.

313
00:17:56,260 --> 00:17:58,520
‫Então, tudo o que precisamos fazer

314
00:17:58,520 --> 00:18:01,603
‫no final é enviar esse usuário atualizado para o cliente.

315
00:18:03,040 --> 00:18:04,083
‫Então, usuário.

316
00:18:06,120 --> 00:18:11,120
‫Agora, é claro, precisamos colocar o udatedUser aqui,

317
00:18:11,160 --> 00:18:15,400
‫salvá-lo novamente e agora deve funcionar.

318
00:18:15,400 --> 00:18:17,877
‫Veja realmente o que fizemos aqui foi ..

319
00:18:21,310 --> 00:18:24,003
‫atualizamos o usuário por

320
00:18:25,450 --> 00:18:30,450
‫último e, antes de fazermos isso, filtramos os nomes

321
00:18:34,490 --> 00:18:39,303
‫de campo indesejados que não podem ser atualizados.

322
00:18:40,758 --> 00:18:42,460
‫Então, vamos tentar isso agora.

323
00:18:42,460 --> 00:18:46,423
‫E este usuário aqui é um usuário normal, então acabamos de

324
00:18:47,780 --> 00:18:49,150
‫criá-lo, lembre-se com

325
00:18:49,150 --> 00:18:50,813
‫o nome de J.

326
00:18:51,920 --> 00:18:55,100
‫Então, vamos dar uma olhada rápida no Compass.

327
00:18:56,900 --> 00:19:00,870
‫Portanto, é um usuário normal, com o nome J.

328
00:19:00,870 --> 00:19:02,450
‫E agora vamos atualizar

329
00:19:02,450 --> 00:19:05,160
‫o nome e também tentar atualizar a função,

330
00:19:05,160 --> 00:19:07,460
‫o que novamente não é permitido.

331
00:19:07,460 --> 00:19:11,090
‫Mas para ver se nosso código está funcionando, vamos tentar.

332
00:19:11,090 --> 00:19:14,470
‫Então, já existe o nome, e digamos que

333
00:19:14,470 --> 00:19:15,970
‫sejamos um usuário

334
00:19:15,970 --> 00:19:19,313
‫mal-intencionado tentando mudar nossa função para administrador.

335
00:19:20,620 --> 00:19:23,150
‫Então, tudo está correto eu acho,

336
00:19:23,150 --> 00:19:25,190
‫então vamos enviar isso

337
00:19:25,190 --> 00:19:28,520
‫agora, e de fato aqui está nosso objeto atualizado.

338
00:19:28,520 --> 00:19:32,150
‫Então, temos nosso novo nome, que é Jonas Schmedtmann,

339
00:19:32,150 --> 00:19:35,250
‫e a função, que ainda é usuário.

340
00:19:35,250 --> 00:19:37,913
‫Não atualizou a função de administrador.

341
00:19:39,460 --> 00:19:42,380
‫Perfeito. Isso é exatamente o que queríamos.

342
00:19:42,380 --> 00:19:46,230
‫Então, salve isso e vamos voltar e, na

343
00:19:46,230 --> 00:19:49,513
‫verdade, acabamos de terminar este vídeo.

344
00:19:50,590 --> 00:19:53,770
‫Em seguida, implementaremos uma funcionalidade de

345
00:19:53,770 --> 00:19:55,913
‫exclusão do usuário atual.

346
00:19:56,890 --> 00:20:00,730
‫Então trabalhamos na atualização, em seguida queremos permitir que um

347
00:20:00,730 --> 00:20:03,970
‫usuário basicamente se exclua quando não quiser mais

348
00:20:03,970 --> 00:20:06,143
‫fazer parte de nosso aplicativo.

