﻿1
00:00:01,290 --> 00:00:03,730
‫Instrutor: Tudo bem, então vamos agora criar

2
00:00:03,730 --> 00:00:06,670
‫esses novos usuários, com base no modelo que

3
00:00:06,670 --> 00:00:09,093
‫acabamos de implementar no último vídeo.

4
00:00:10,630 --> 00:00:14,180
‫Portanto, faremos a maioria das coisas relacionadas ao

5
00:00:14,180 --> 00:00:17,350
‫usuário, como criar novos usuários, efetuar login

6
00:00:17,350 --> 00:00:20,933
‫de usuários ou atualizar senhas no controlador de autenticação.

7
00:00:22,190 --> 00:00:25,800
‫Portanto, todas as coisas relacionadas à autenticação, na verdade,

8
00:00:25,800 --> 00:00:28,550
‫não estarão no controlador de usuário que

9
00:00:28,550 --> 00:00:30,250
‫criamos antes, mas

10
00:00:30,250 --> 00:00:33,313
‫em vez disso, criaremos um controlador de autenticação.

11
00:00:35,070 --> 00:00:36,990
‫Portanto, todas as funções

12
00:00:36,990 --> 00:00:38,943
‫relacionadas à autenticação irão aqui.

13
00:00:41,860 --> 00:00:44,300
‫E isso fará um pouco mais de sentido mais

14
00:00:44,300 --> 00:00:46,530
‫tarde, quando começarmos a usar todas as funções

15
00:00:46,530 --> 00:00:48,103
‫que vou colocar aqui.

16
00:00:49,500 --> 00:00:51,560
‫E agora, a primeira coisa

17
00:00:51,560 --> 00:00:53,983
‫que precisamos fazer é importar nosso

18
00:00:57,870 --> 00:01:00,610
‫usuário, então nosso modelo de usuário, é claro,

19
00:01:00,610 --> 00:01:05,610
‫e isso está em um nível acima, deve estar em modelos e, em

20
00:01:07,250 --> 00:01:08,577
‫seguida, em userModel.

21
00:01:09,450 --> 00:01:10,283
‫Tudo bem.

22
00:01:12,490 --> 00:01:16,500
‫Então, vamos criar e exportar nosso primeiro controlador.

23
00:01:16,500 --> 00:01:18,347
‫E vou chamar isso de inscrição.

24
00:01:20,020 --> 00:01:22,990
‫E então você vê que não estou chamando de criar usuário,

25
00:01:22,990 --> 00:01:25,060
‫como fiz em um controlador de

26
00:01:25,060 --> 00:01:27,300
‫tour, mas na verdade estou chamando de inscrição

27
00:01:27,300 --> 00:01:29,700
‫porque esse é o nome que tem um pouco

28
00:01:29,700 --> 00:01:31,913
‫mais de significado no contexto de autenticação.

29
00:01:33,360 --> 00:01:36,510
‫Portanto, será uma função assíncrona, é claro, porque faremos

30
00:01:36,510 --> 00:01:38,973
‫algumas operações de banco de dados.

31
00:01:42,190 --> 00:01:44,913
‫Em seguida, solicite, responda e avance

32
00:01:46,000 --> 00:01:49,650
‫como sempre, e aqui é onde criamos o novo usuário.

33
00:01:49,650 --> 00:01:52,573
‫E isso é muito semelhante ao que fizemos antes.

34
00:01:53,460 --> 00:01:55,590
‫Desta vez, é denominado newUser e,

35
00:01:55,590 --> 00:01:57,070
‫em seguida, lembre-se de

36
00:01:57,070 --> 00:02:00,090
‫como criamos um novo documento com base em um modelo.

37
00:02:00,090 --> 00:02:02,210
‫Então usamos o nome do

38
00:02:02,210 --> 00:02:04,610
‫modelo, claro, que neste caso é

39
00:02:04,610 --> 00:02:07,163
‫User, e então usamos o método create.

40
00:02:08,740 --> 00:02:10,020
‫E então tudo o

41
00:02:10,020 --> 00:02:12,150
‫que precisamos fazer é passar um objeto com os

42
00:02:12,150 --> 00:02:14,353
‫dados a partir dos quais o usuário deve ser criado.

43
00:02:15,380 --> 00:02:20,093
‫E então, assim como antes, esses dados estão realmente em requisição. corpo.

44
00:02:21,070 --> 00:02:23,430
‫E então tudo isso vai retornar

45
00:02:23,430 --> 00:02:25,920
‫uma promessa, então precisamos aguardar isso, e

46
00:02:25,920 --> 00:02:28,683
‫é por isso que essa função é assíncrona.

47
00:02:30,150 --> 00:02:32,403
‫E vejo que aqui em cima precisamos de exportações.

48
00:02:34,374 --> 00:02:36,740
‫E agora, na próxima etapa,

49
00:02:36,740 --> 00:02:40,310
‫iremos enviar esse novo usuário para o cliente.

50
00:02:40,310 --> 00:02:45,283
‫Então res. status, que é 201 para criado e, em

51
00:02:46,720 --> 00:02:48,453
‫seguida, nosso objeto JSON.

52
00:02:52,160 --> 00:02:53,763
‫Então isso é sucesso

53
00:02:55,010 --> 00:02:58,250
‫novamente, e então nossa propriedade de dados que é

54
00:02:58,250 --> 00:02:59,690
‫novamente chamada de

55
00:02:59,690 --> 00:03:03,510
‫envelope aqui, então uma propriedade que irá conter os próprios dados.

56
00:03:03,510 --> 00:03:05,770
‫E os dados agora são chamados de

57
00:03:05,770 --> 00:03:07,723
‫usuário, quando antes eram chamados de

58
00:03:09,105 --> 00:03:12,323
‫tour, então o que vamos enviar aqui é o newUser.

59
00:03:13,890 --> 00:03:16,270
‫Salve-a e, antes de tentarmos, lembre-se de

60
00:03:16,270 --> 00:03:18,810
‫que esta é uma função assíncrona e, portanto,

61
00:03:18,810 --> 00:03:21,393
‫precisamos pensar sobre o tratamento de erros aqui.

62
00:03:22,500 --> 00:03:24,470
‫Então, o que precisamos fazer aqui?

63
00:03:24,470 --> 00:03:26,840
‫Bem, precisamos envolver toda a função

64
00:03:26,840 --> 00:03:29,770
‫que acabamos de criar na função catchAsync que

65
00:03:29,770 --> 00:03:31,570
‫criamos na última seção.

66
00:03:32,810 --> 00:03:37,160
‫Portanto, lembre-se de como fizemos isso no tourController, onde todas

67
00:03:37,160 --> 00:03:39,640
‫as funções assíncronas são agrupadas nesta

68
00:03:39,640 --> 00:03:42,740
‫função catchAsync para que não tenhamos que

69
00:03:42,740 --> 00:03:43,900
‫escrever o

70
00:03:43,900 --> 00:03:47,640
‫bloco try catch em cada uma das funções aqui.

71
00:03:47,640 --> 00:03:49,440
‫Lembra da última seção?

72
00:03:50,410 --> 00:03:52,450
‫Então, na verdade,

73
00:03:52,450 --> 00:03:55,963
‫vou copiar esta declaração de requerimento aqui.

74
00:04:00,190 --> 00:04:02,353
‫É um pouco

75
00:04:03,220 --> 00:04:07,253
‫preguiçoso às vezes, não sinto vontade de

76
00:04:08,360 --> 00:04:12,570
‫escrever o mesmo código indefinidamente, então catchAsync, e

77
00:04:12,570 --> 00:04:16,303
‫então precisamos encerrar isso aqui no final.

78
00:04:18,793 --> 00:04:20,220
‫E agora, tudo o

79
00:04:20,220 --> 00:04:22,393
‫que precisamos fazer é realmente implementar a

80
00:04:22,393 --> 00:04:25,440
‫rota para que este manipulador de inscrição aqui possa ser chamado.

81
00:04:25,440 --> 00:04:27,650
‫E então vamos para nosso

82
00:04:27,650 --> 00:04:31,400
‫userRoutes, que na verdade já criamos algum tempo antes,

83
00:04:31,400 --> 00:04:33,923
‫e já temos algumas rotas aqui.

84
00:04:34,930 --> 00:04:37,653
‫Mas, na verdade, vou criar um novo aqui agora.

85
00:04:43,990 --> 00:04:46,700
‫E como mencionei logo no início deste vídeo, o recurso

86
00:04:46,700 --> 00:04:48,700
‫do usuário é um pouco diferente de

87
00:04:48,700 --> 00:04:50,290
‫todos os outros recursos.

88
00:04:50,290 --> 00:04:52,730
‫Novamente, porque realmente tem a ver com

89
00:04:52,730 --> 00:04:54,680
‫todas as coisas de autenticação.

90
00:04:54,680 --> 00:04:57,010
‫E então temos um controlador diferente

91
00:04:57,010 --> 00:05:00,410
‫para isso, o authController, os nomes das funções também

92
00:05:00,410 --> 00:05:02,110
‫têm alguns nomes

93
00:05:02,110 --> 00:05:05,143
‫diferentes e, portanto, também teremos uma rota especial.

94
00:05:08,540 --> 00:05:11,770
‫Digamos roteador. post, e então

95
00:05:11,770 --> 00:05:15,313
‫criaremos uma rota para inscrição, então / signup, e

96
00:05:18,450 --> 00:05:20,270
‫então é aqui que usaremos

97
00:05:20,270 --> 00:05:22,370
‫aquela função que acabamos de criar.

98
00:05:23,260 --> 00:05:24,800
‫E, claro, antes

99
00:05:24,800 --> 00:05:27,963
‫de fazermos isso, precisamos exigir esse controlador de autenticação.

100
00:05:29,520 --> 00:05:32,040
‫Então, vamos apenas duplicar essa

101
00:05:32,040 --> 00:05:37,040
‫linha aqui e substituir o usuário em dois lugares, e aqui

102
00:05:37,440 --> 00:05:39,713
‫temos nosso authController, e agora

103
00:05:41,416 --> 00:05:42,716
‫vamos usá-lo. inscrever-se.

104
00:05:44,340 --> 00:05:45,173
‫Como você pode

105
00:05:47,050 --> 00:05:49,790
‫ver, a inscrição é realmente um ponto de extremidade especial.

106
00:05:49,790 --> 00:05:51,410
‫Não se encaixa na arquitetura REST

107
00:05:51,410 --> 00:05:53,560
‫da qual falamos antes, porque neste caso

108
00:05:53,560 --> 00:05:55,070
‫não faz muito sentido.

109
00:05:55,070 --> 00:05:57,920
‫Portanto, lembre-se de como dissemos que, em

110
00:05:57,920 --> 00:06:00,030
‫alguns casos especiais, é

111
00:06:00,030 --> 00:06:02,690
‫claro que podemos criar outros terminais que

112
00:06:02,690 --> 00:06:07,690
‫não se encaixam 100% na filosofia REST que é basicamente implementada aqui.

113
00:06:07,980 --> 00:06:09,853
‫Então isso aqui obviamente segue

114
00:06:10,950 --> 00:06:15,040
‫100% a filosofia REST, onde o nome da URL não tem nada a

115
00:06:15,040 --> 00:06:17,790
‫ver com a ação que é realmente executada.

116
00:06:17,790 --> 00:06:19,950
‫Enquanto estiver aqui, é claro, ele tem.

117
00:06:19,950 --> 00:06:22,080
‫Portanto, o nome da rota é

118
00:06:22,080 --> 00:06:23,960
‫inscrição porque estamos inscrevendo usuários.

119
00:06:23,960 --> 00:06:25,953
‫E também aqui implementamos todos esses warps

120
00:06:26,880 --> 00:06:28,760
‫HTTP diferentes, mas aqui para

121
00:06:28,760 --> 00:06:30,940
‫a inscrição, só precisamos realmente do POST.

122
00:06:31,810 --> 00:06:34,773
‫Portanto, não podemos realmente obter dados da inscrição ou não

123
00:06:35,668 --> 00:06:38,520
‫podemos corrigir uma inscrição, portanto, não a atualize.

124
00:06:38,520 --> 00:06:41,810
‫Realmente não faz sentido e, portanto, neste caso, tudo o

125
00:06:41,810 --> 00:06:43,170
‫que queremos fazer

126
00:06:43,170 --> 00:06:45,140
‫é ter uma rota para

127
00:06:45,140 --> 00:06:47,160
‫inscrição, onde só podemos POSTAR dados.

128
00:06:47,160 --> 00:06:48,953
‫Porque, novamente, só faz

129
00:06:50,170 --> 00:06:52,370
‫sentido realmente enviar dados para essa rota,

130
00:06:52,370 --> 00:06:54,740
‫para que o novo usuário seja criado.

131
00:06:54,740 --> 00:06:57,820
‫E teremos diferentes rotas semelhantes a esta,

132
00:06:57,820 --> 00:07:00,240
‫como para login, ou para

133
00:07:00,240 --> 00:07:03,820
‫redefinir senha, e todos os tipos de coisas assim.

134
00:07:03,820 --> 00:07:06,003
‫E nós também manteremos essas

135
00:07:07,163 --> 00:07:10,150
‫rotas aqui para aquelas em um formato mais REST,

136
00:07:10,150 --> 00:07:12,930
‫pois também existe a possibilidade de um administrador

137
00:07:12,930 --> 00:07:15,180
‫de sistema atualizar ou deletar ou

138
00:07:15,180 --> 00:07:18,370
‫obter todos os usuários com base em seus IDs.

139
00:07:18,370 --> 00:07:21,423
‫Mas cuidaremos disso mais tarde, por enquanto queremos

140
00:07:22,620 --> 00:07:24,590
‫apenas implementar todas as funções

141
00:07:24,590 --> 00:07:25,890
‫relacionadas à autenticação.

142
00:07:25,890 --> 00:07:28,970
‫Basicamente, funções que são relevantes apenas para

143
00:07:28,970 --> 00:07:30,620
‫o próprio usuário.

144
00:07:30,620 --> 00:07:33,340
‫Portanto, não é um administrador que vai inscrever um usuário,

145
00:07:33,340 --> 00:07:36,180
‫ou não é um administrador que vai fazer o login

146
00:07:36,180 --> 00:07:38,730
‫de um usuário, mas em vez disso, é

147
00:07:38,730 --> 00:07:41,580
‫o próprio usuário que vai se inscrever, ou se autenticar.

148
00:07:41,580 --> 00:07:45,040
‫Ok, isso faz sentido?

149
00:07:45,040 --> 00:07:46,613
‫Portanto, devemos ter tudo no

150
00:07:47,570 --> 00:07:50,160
‫lugar agora, para que funcione quando criarmos nosso novo usuário.

151
00:07:50,160 --> 00:07:53,830
‫Então, quando nos inscrevemos basicamente, para nosso aplicativo.

152
00:07:53,830 --> 00:07:57,270
‫Então, vamos tentar isso agora.

153
00:07:57,270 --> 00:07:58,683
‫Vamos apenas copiar este

154
00:08:01,020 --> 00:08:02,447
‫URL, usuários e, em seguida, inscrever-se.

155
00:08:06,610 --> 00:08:08,393
‫Em seguida, precisamos especificar o

156
00:08:11,743 --> 00:08:13,710
‫corpo, dizemos bruto e, em seguida, JSON.

157
00:08:14,640 --> 00:08:19,190
‫Ah, e também, não se esqueça, é claro, de definir

158
00:08:19,190 --> 00:08:20,720
‫este como POST.

159
00:08:20,720 --> 00:08:22,223
‫Então, de quais dados precisamos aqui?

160
00:08:25,478 --> 00:08:27,830
‫Lembre-se, primeiro um é

161
00:08:27,830 --> 00:08:30,293
‫o nome, depois o e-mail, e

162
00:08:34,710 --> 00:08:39,710
‫estou colocando o meu aqui na verdade, depois a senha, então

163
00:08:46,211 --> 00:08:49,211
‫vamos fazer algo aqui, realmente não importa.

164
00:08:50,360 --> 00:08:52,560
‫E, novamente, falaremos sobre gerenciamento de senhas

165
00:08:54,850 --> 00:08:56,330
‫um pouco mais tarde,

166
00:08:56,330 --> 00:08:58,383
‫e na verdade bem no próximo vídeo.

167
00:08:59,290 --> 00:09:01,140
‫Então agora este aqui deve ser o mesmo.

168
00:09:02,420 --> 00:09:04,960
‫Então, passe1234, apenas como um teste.

169
00:09:04,960 --> 00:09:08,143
‫E a lembrança de foto não é obrigatória,

170
00:09:09,287 --> 00:09:11,820
‫então não vou fazer isso.

171
00:09:11,820 --> 00:09:13,663
‫E então vamos ver agora.

172
00:09:15,040 --> 00:09:16,133
‫E agora temos esse

173
00:09:17,990 --> 00:09:20,180
‫erro aqui, porque eu digitei a senha incorretamente aqui.

174
00:09:20,180 --> 00:09:22,853
‫Ok, então essa seria a maneira alemã de escrever isso.

175
00:09:24,150 --> 00:09:27,373
‫E agora está certo.

176
00:09:28,370 --> 00:09:29,890
‫Ok, de fato, temos nosso novo usuário aqui.

177
00:09:29,890 --> 00:09:33,460
‫Perfeito.

178
00:09:33,460 --> 00:09:34,580
‫Agora, digamos que tentamos fazer isso com um GET.

179
00:09:34,580 --> 00:09:38,350
‫O que obteríamos?

180
00:09:38,350 --> 00:09:39,800
‫Bem, "Esta

181
00:09:39,800 --> 00:09:42,300
‫rota ainda não está definida",

182
00:09:42,300 --> 00:09:44,350
‫porque na verdade

183
00:09:44,350 --> 00:09:47,620
‫já meio que definimos essa rota aqui,

184
00:09:47,620 --> 00:09:50,180
‫basicamente essa parte da rota,

185
00:09:50,180 --> 00:09:52,910
‫deixe-me mostrar isso rapidamente, não está

186
00:09:52,910 --> 00:09:55,970
‫no tourController, mas em o userController.

187
00:09:55,970 --> 00:09:58,640
‫Basicamente, temos getUser aqui e

188
00:09:58,640 --> 00:10:01,560
‫"Esta rota ainda não foi definida. "Então é isso que estamos recebendo, mas é

189
00:10:01,560 --> 00:10:04,174
‫claro que

190
00:10:04,174 --> 00:10:06,024
‫não estamos realmente interessados nisso.

191
00:10:07,160 --> 00:10:09,860
‫E agora vamos salvar isso aqui, no Postman,

192
00:10:11,460 --> 00:10:13,630
‫para que possamos reutilizá-lo facilmente.

193
00:10:13,630 --> 00:10:16,613
‫Então inscreva-se.

194
00:10:21,520 --> 00:10:22,513
‫E agora,

195
00:10:24,700 --> 00:10:26,600
‫apenas para confirmar rapidamente, vamos abri-lo

196
00:10:26,600 --> 00:10:29,420
‫no Compass aqui também, e ver que neste ponto

197
00:10:29,420 --> 00:10:32,320
‫temos apenas passeios, então vamos aqui para o natours,

198
00:10:32,320 --> 00:10:36,433
‫tente recarregar isso, e isso provavelmente está aqui, e então na verdade, agora temos

199
00:10:37,490 --> 00:10:38,890
‫nossa coleção de usuários aqui.

200
00:10:41,000 --> 00:10:44,820
‫Então, vamos abri-lo e, de fato, agora temos

201
00:10:44,820 --> 00:10:47,120
‫nosso primeiro documento aqui.

202
00:10:47,120 --> 00:10:49,470
‫Então, o usuário que acabamos de criar.

203
00:10:49,470 --> 00:10:51,640
‫Agora aqui você pode ver a senha

204
00:10:51,640 --> 00:10:54,430
‫simples e, portanto, é claro que isso não é o ideal.

205
00:10:54,430 --> 00:10:57,270
‫E, claro, isso não é o ideal, portanto, em

206
00:10:57,270 --> 00:10:59,170
‫um aplicativo da web, as

207
00:10:59,170 --> 00:11:03,090
‫senhas nunca devem ser armazenadas de forma simples em um banco de dados.

208
00:11:03,090 --> 00:11:05,983
‫Portanto, há muito gerenciamento de senha que precisa ser

209
00:11:07,060 --> 00:11:10,020
‫feito nos bastidores, e isso é exatamente o que

210
00:11:10,020 --> 00:11:11,750
‫faremos no próximo vídeo.

