﻿1
00:00:01,030 --> 00:00:02,580
‫Instrutor: Bem-vindo de volta.

2
00:00:02,580 --> 00:00:05,470
‫Portanto, autenticação e autorização referem-se a

3
00:00:05,470 --> 00:00:07,680
‫usuários que se inscrevem, fazem

4
00:00:07,680 --> 00:00:11,040
‫login e acessam páginas ou rotas, para as

5
00:00:11,040 --> 00:00:13,190
‫quais lhes concedemos permissão.

6
00:00:13,190 --> 00:00:15,570
‫Então, é realmente tudo sobre os usuários.

7
00:00:15,570 --> 00:00:18,890
‫E, portanto, precisamos começar implementando o modelo de usuário nesta

8
00:00:18,890 --> 00:00:21,260
‫aula, para que na próxima possamos

9
00:00:21,260 --> 00:00:24,383
‫criar novos usuários em nosso banco de dados.

10
00:00:25,990 --> 00:00:28,710
‫Portanto, de volta ao nosso aplicativo, vamos prosseguir

11
00:00:28,710 --> 00:00:31,740
‫e criar um novo arquivo para o modelo do usuário.

12
00:00:31,740 --> 00:00:34,373
‫Então, é claro, em nossa pasta de modelo,

13
00:00:38,571 --> 00:00:40,890
‫New File, userModel. js.

14
00:00:40,890 --> 00:00:42,610
‫E, como antes,

15
00:00:42,610 --> 00:00:44,563
‫começamos exigindo o pacote Mongoose.

16
00:00:52,430 --> 00:00:53,510
‫Tudo bem.

17
00:00:53,510 --> 00:00:55,920
‫E agora, tudo o que precisamos fazer é criar um esquema e,

18
00:00:55,920 --> 00:00:57,890
‫em seguida, criar um modelo a partir dele.

19
00:00:57,890 --> 00:00:59,670
‫Assim como fizemos com os

20
00:00:59,670 --> 00:01:01,750
‫passeios, vamos fazer aqui agora com os usuários.

21
00:01:01,750 --> 00:01:04,140
‫E na verdade, como já fizemos

22
00:01:04,140 --> 00:01:07,660
‫isso antes, quero deixar isso como um desafio para vocês, certo?

23
00:01:07,660 --> 00:01:10,963
‫Portanto, quero que você crie um esquema com cinco campos.

24
00:01:12,020 --> 00:01:14,713
‫Então, nome, e-mail e, em seguida, uma

25
00:01:16,660 --> 00:01:19,380
‫foto; o que vai ser uma corda, assim

26
00:01:19,380 --> 00:01:21,063
‫como em nossas turnês.

27
00:01:22,230 --> 00:01:24,223
‫Também quero um campo para

28
00:01:25,300 --> 00:01:27,283
‫senha e para senhaConfirmar.

29
00:01:30,230 --> 00:01:31,063
‫OK?

30
00:01:31,063 --> 00:01:32,330
‫E um pouco mais

31
00:01:32,330 --> 00:01:34,190
‫sobre isso mais tarde, quando eu resolver esse

32
00:01:34,190 --> 00:01:36,480
‫desafio para você, mas por agora, eu realmente quero que

33
00:01:36,480 --> 00:01:38,540
‫você pratique a criação desse esquema por conta

34
00:01:38,540 --> 00:01:41,770
‫própria e, em seguida, crie também um modelo a partir desse esquema, certo?

35
00:01:41,770 --> 00:01:44,090
‫E então, no final, você também pode exportá-lo.

36
00:01:44,090 --> 00:01:46,350
‫Então, por favor, pause o vídeo neste momento, e

37
00:01:46,350 --> 00:01:48,250
‫eu estarei de volta em um segundo aqui

38
00:01:48,250 --> 00:01:49,973
‫para resolver este desafio para você.

39
00:01:52,590 --> 00:01:53,480
‫Tudo bem.

40
00:01:53,480 --> 00:01:55,030
‫Espero que você tenha concluído esse desafio.

41
00:01:55,030 --> 00:01:56,690
‫E agora vou resolver isso.

42
00:01:56,690 --> 00:01:59,330
‫E não se preocupe se não parecer exatamente o mesmo.

43
00:01:59,330 --> 00:02:02,150
‫Você pode simplesmente adaptá-lo conforme avançamos neste vídeo.

44
00:02:02,150 --> 00:02:03,563
‫Então, por meio dessa solução.

45
00:02:05,430 --> 00:02:07,730
‫Então, vou chamá-lo de userSchema.

46
00:02:09,310 --> 00:02:13,107
‫E, como antes, criamos um novo mangusto. Esquema.

47
00:02:15,270 --> 00:02:18,010
‫E então, passamos nosso objeto de esquema

48
00:02:18,010 --> 00:02:20,410
‫e começamos a definir nossos campos.

49
00:02:20,410 --> 00:02:24,773
‫Então, eu quero um nome com o tipo, é claro, de String.

50
00:02:28,430 --> 00:02:31,023
‫E também quero que seja exigido.

51
00:02:32,440 --> 00:02:34,310
‫Portanto, sempre que um novo usuário

52
00:02:34,310 --> 00:02:37,113
‫é criado, ele precisa nos dizer basicamente seu nome.

53
00:02:37,980 --> 00:02:40,623
‫Portanto, vamos definir uma mensagem de erro aqui também.

54
00:02:41,617 --> 00:02:44,447
‫"Diga-nos o seu nome! " Tudo

55
00:02:45,890 --> 00:02:46,960
‫bem?

56
00:02:46,960 --> 00:02:48,400
‫Então esse é o nome.

57
00:02:48,400 --> 00:02:50,373
‫Em seguida, queremos o e-mail.

58
00:02:51,680 --> 00:02:52,630
‫Tudo bem?

59
00:02:52,630 --> 00:02:55,310
‫E então isso será usado para o usuário fazer o

60
00:02:55,310 --> 00:02:58,630
‫login e não vamos criar uma propriedade de nome de usuário aqui, ok?

61
00:02:58,630 --> 00:03:01,920
‫Então, em alguns aplicativos, você verá um nome de

62
00:03:01,920 --> 00:03:04,500
‫usuário sendo usado, mas neste caso, queremos

63
00:03:04,500 --> 00:03:08,030
‫mantê-lo simples aqui e simplesmente identificar os usuários por e-mail.

64
00:03:08,030 --> 00:03:10,803
‫E então, novamente, este é do tipo String.

65
00:03:13,150 --> 00:03:14,873
‫Também é um campo obrigatório.

66
00:03:22,030 --> 00:03:23,883
‫Então, apenas uma mensagem de erro novamente.

67
00:03:24,780 --> 00:03:28,873
‫Em seguida, quero que os e-mails também sejam únicos, certo?

68
00:03:30,360 --> 00:03:33,320
‫Portanto, único definido como verdadeiro.

69
00:03:33,320 --> 00:03:35,960
‫E isso basicamente porque esse e-mail

70
00:03:35,960 --> 00:03:39,450
‫é, obviamente, o identificador exclusivo de cada usuário, certo?

71
00:03:39,450 --> 00:03:42,920
‫Agora, por padrão, os e-mails devem ser exclusivos, certo?

72
00:03:42,920 --> 00:03:45,570
‫Mas vamos ter 100% de certeza de

73
00:03:45,570 --> 00:03:47,000
‫que não haverá

74
00:03:47,000 --> 00:03:49,740
‫contas com o mesmo endereço de e-mail, certo?

75
00:03:49,740 --> 00:03:52,770
‫Agora também podemos especificar outra opção de tipo de esquema

76
00:03:52,770 --> 00:03:54,373
‫aqui, que está em minúsculas.

77
00:03:56,150 --> 00:03:57,100
‫Então esse é um novo.

78
00:03:57,100 --> 00:03:58,410
‫E não é um validador.

79
00:03:58,410 --> 00:04:00,410
‫Tudo o que vai fazer

80
00:04:00,410 --> 00:04:03,150
‫é basicamente transformar o e-mail em letras minúsculas.

81
00:04:03,150 --> 00:04:08,140
‫Então, se alguém disser algo como Jonas @ Gmail ou qualquer outra coisa,

82
00:04:08,140 --> 00:04:11,260
‫isso será convertido tudo para letras minúsculas.

83
00:04:11,260 --> 00:04:12,210
‫OK?

84
00:04:12,210 --> 00:04:15,380
‫E agora, finalmente, também queremos validar o

85
00:04:15,380 --> 00:04:16,780
‫endereço de e-mail.

86
00:04:16,780 --> 00:04:19,300
‫Então, basicamente testando se o

87
00:04:19,300 --> 00:04:23,070
‫e-mail fornecido corresponde ao formato de e-mail comum, certo?

88
00:04:23,070 --> 00:04:27,710
‫Por exemplo, novamente jonas @ gmail. com seria um email

89
00:04:27,710 --> 00:04:29,250
‫válido, mas

90
00:04:29,250 --> 00:04:32,270
‫por exemplo, assim, não seria.

91
00:04:32,270 --> 00:04:33,860
‫Ou assim.

92
00:04:33,860 --> 00:04:36,290
‫E então, para isso, precisamos basicamente criar

93
00:04:36,290 --> 00:04:37,603
‫nosso próprio validador.

94
00:04:38,650 --> 00:04:41,350
‫Agora não vamos criar nosso próprio validador

95
00:04:41,350 --> 00:04:44,480
‫para isso, mas em vez disso, vamos usar aquele

96
00:04:44,480 --> 00:04:47,730
‫pacote de validador que mostrei antes do npm, certo?

97
00:04:47,730 --> 00:04:50,520
‫Então lembre-se aqui no tourModel, na verdade eu

98
00:04:50,520 --> 00:04:52,770
‫mostrei este módulo aqui, mas

99
00:04:52,770 --> 00:04:54,620
‫não acabamos usando porque

100
00:04:54,620 --> 00:04:57,270
‫não era muito útil em nosso caso.

101
00:04:57,270 --> 00:04:59,810
‫Mas agora, vai ser muito útil,

102
00:04:59,810 --> 00:05:02,933
‫então vou seguir em frente e copiá-lo aqui,

103
00:05:05,620 --> 00:05:09,180
‫ok, para que possamos usá-lo diretamente em nosso esquema.

104
00:05:09,180 --> 00:05:12,653
‫Então, agora para criar nosso validador

105
00:05:13,730 --> 00:05:16,550
‫customizado, usamos validate, lembra?

106
00:05:16,550 --> 00:05:18,870
‫E então passamos a mensagem anti-erro

107
00:05:18,870 --> 00:05:21,380
‫da função, assim como com nossos outros validadores.

108
00:05:21,380 --> 00:05:23,980
‫E para verificar se um email

109
00:05:23,980 --> 00:05:28,330
‫é válido, tudo o que precisamos fazer é chamar o método

110
00:05:29,810 --> 00:05:32,030
‫isEmail no objeto validador, ok?

111
00:05:32,030 --> 00:05:34,380
‫Isso, novamente, vem da documentação,

112
00:05:34,380 --> 00:05:38,160
‫que mostrei antes, quando usamos este módulo pela primeira vez.

113
00:05:38,160 --> 00:05:40,600
‫E assim, sempre que precisar de um validador personalizado,

114
00:05:40,600 --> 00:05:42,960
‫você pode ir em frente e verificar a

115
00:05:42,960 --> 00:05:46,540
‫documentação e descobrir se há uma boa função para o seu caso de uso.

116
00:05:46,540 --> 00:05:49,340
‫Portanto, neste caso, é o validador. E-mail, e

117
00:05:49,340 --> 00:05:51,230
‫nossa mensagem de erro

118
00:05:55,174 --> 00:05:57,540
‫será "um e-mail válido", certo?

119
00:05:57,540 --> 00:05:59,800
‫E no próximo vídeo, quando vamos criar

120
00:05:59,800 --> 00:06:02,980
‫usuários a partir deste modelo, vamos testar tudo isso para

121
00:06:02,980 --> 00:06:04,463
‫ver se funciona.

122
00:06:05,470 --> 00:06:08,420
‫Em seguida, também quero que o usuário possa

123
00:06:08,420 --> 00:06:11,210
‫basicamente fazer upload de uma foto.

124
00:06:11,210 --> 00:06:13,490
‫E vamos armazenar isso simplesmente em uma String.

125
00:06:13,490 --> 00:06:15,600
‫Mas não é obrigatório, ok?

126
00:06:15,600 --> 00:06:20,030
‫Portanto, uma foto geralmente é opcional na maioria dos aplicativos da web,

127
00:06:20,030 --> 00:06:22,050
‫então faremos o mesmo aqui.

128
00:06:22,050 --> 00:06:24,420
‫Então, se o usuário quiser fazer upload

129
00:06:24,420 --> 00:06:27,580
‫de uma foto, ela será armazenada em algum lugar em

130
00:06:27,580 --> 00:06:30,380
‫nosso sistema de arquivos e o caminho para essa

131
00:06:30,380 --> 00:06:32,910
‫foto será armazenado neste campo de foto, ok?

132
00:06:32,910 --> 00:06:34,740
‫Então é semelhante ao que tínhamos aqui.

133
00:06:34,740 --> 00:06:36,373
‫Lembre-se, temos, sim,

134
00:06:38,490 --> 00:06:40,340
‫temos imageCover e, portanto,

135
00:06:40,340 --> 00:06:42,850
‫também é simplesmente o caminho do

136
00:06:42,850 --> 00:06:45,100
‫local em nosso sistema de arquivos

137
00:06:45,100 --> 00:06:47,343
‫onde a imagem é realmente carregada.

138
00:06:49,020 --> 00:06:50,300
‫Tudo bem?

139
00:06:50,300 --> 00:06:51,570
‫Então essa é a foto.

140
00:06:51,570 --> 00:06:52,973
‫E agora precisamos de senha.

141
00:06:57,065 --> 00:07:01,120
‫E a senha deve ser, novamente, do tipo String.

142
00:07:02,410 --> 00:07:03,963
‫Isso não é correto.

143
00:07:04,850 --> 00:07:08,723
‫E claro que a senha é obrigatória, certo?

144
00:07:09,690 --> 00:07:10,723
‫Tão verdade.

145
00:07:15,347 --> 00:07:16,737
‫"Forneça uma senha. "E

146
00:07:17,750 --> 00:07:20,900
‫também vamos impor uma regra de senha muito simples,

147
00:07:20,900 --> 00:07:23,420
‫que é que uma senha deve ter

148
00:07:23,420 --> 00:07:24,640
‫pelo menos oito caracteres.

149
00:07:24,640 --> 00:07:25,933
‫Então, como fazemos isso?

150
00:07:26,840 --> 00:07:28,920
‫Bem, isso é muito fácil.

151
00:07:28,920 --> 00:07:31,003
‫Tudo o que precisamos fazer é

152
00:07:32,480 --> 00:07:34,880
‫minlength e defini-lo como oito neste caso.

153
00:07:34,880 --> 00:07:37,070
‫E essa é realmente a única regra

154
00:07:37,070 --> 00:07:38,650
‫de senha que vamos impor.

155
00:07:38,650 --> 00:07:41,270
‫E muitos aplicativos têm todas essas regras

156
00:07:41,270 --> 00:07:45,300
‫malucas, como pelo menos um número e um caractere e um símbolo,

157
00:07:45,300 --> 00:07:47,450
‫mas não vamos implementar nada disso

158
00:07:47,450 --> 00:07:49,250
‫aqui porque, na verdade,

159
00:07:49,250 --> 00:07:52,140
‫descobriu-se que isso não é realmente eficaz, ok?

160
00:07:52,140 --> 00:07:53,750
‫Normalmente, as senhas mais seguras

161
00:07:53,750 --> 00:07:55,530
‫são as mais longas, ok,

162
00:07:55,530 --> 00:07:58,550
‫e não aquelas com símbolos e caracteres malucos e

163
00:07:58,550 --> 00:07:59,513
‫tudo mais.

164
00:08:00,580 --> 00:08:03,610
‫Isso é o suficiente para a senha por enquanto,

165
00:08:03,610 --> 00:08:06,340
‫mas vamos criar alguns campos mais específicos aqui

166
00:08:06,340 --> 00:08:10,190
‫para a senha quando começarmos a gostar de gerenciar senhas no

167
00:08:10,190 --> 00:08:12,020
‫banco de dados, ok?

168
00:08:12,020 --> 00:08:14,403
‫Mas por agora, isso é o suficiente aqui.

169
00:08:16,160 --> 00:08:18,407
‫E agora é passwordConfirm.

170
00:08:19,390 --> 00:08:22,230
‫Então você sabe que normalmente, ao criar uma nova conta

171
00:08:22,230 --> 00:08:24,450
‫em algum aplicativo da web, você sempre

172
00:08:24,450 --> 00:08:28,260
‫precisa inserir sua senha e depois confirmá-la apenas para ter certeza de que

173
00:08:28,260 --> 00:08:29,480
‫são as mesmas.

174
00:08:29,480 --> 00:08:31,523
‫E é para isso que serve este campo.

175
00:08:32,410 --> 00:08:35,573
‫É claro que também é do tipo String.

176
00:08:36,720 --> 00:08:38,723
‫E, claro, também é necessário.

177
00:08:45,081 --> 00:08:45,914
‫OK.

178
00:08:45,914 --> 00:08:48,860
‫E novamente, vamos criar mais algumas propriedades aqui

179
00:08:48,860 --> 00:08:52,210
‫na opção de tipo de esquema um pouco mais tarde, ok?

180
00:08:52,210 --> 00:08:56,130
‫Especificamente, validadores para ver se a senha de

181
00:08:56,130 --> 00:09:00,600
‫confirmação é realmente a mesma que a senha principal, certo?

182
00:09:00,600 --> 00:09:03,220
‫Mas, por enquanto, esse esquema é realmente suficiente

183
00:09:03,220 --> 00:09:06,300
‫e, portanto, tem esses campos que pedi para você

184
00:09:07,179 --> 00:09:08,529
‫criar no desafio.

185
00:09:09,980 --> 00:09:12,360
‫E agora, na verdade, tudo o que precisamos fazer é seguir

186
00:09:12,360 --> 00:09:14,703
‫em frente e criar o modelo a partir do esquema.

187
00:09:16,410 --> 00:09:18,930
‫Então o usuário, com U maiúsculo,

188
00:09:18,930 --> 00:09:22,090
‫apenas para seguir aquela convenção de que as

189
00:09:22,090 --> 00:09:24,393
‫variáveis do modelo geralmente estão

190
00:09:25,490 --> 00:09:30,490
‫sempre com letra maiúscula, depois mangusto. model, e então passar o nome do model

191
00:09:31,400 --> 00:09:33,850
‫e, claro, queremos que este seja

192
00:09:34,910 --> 00:09:39,150
‫chamado de User e criado a partir do userSchema que criamos antes.

193
00:09:39,150 --> 00:09:44,150
‫E então módulo. exportações definidas para o usuário.

194
00:09:45,300 --> 00:09:46,260
‫E é isso.

195
00:09:46,260 --> 00:09:49,230
‫Esse é o nosso userSchema simples que

196
00:09:49,230 --> 00:09:51,720
‫nos permitirá começar a criar usuários

197
00:09:51,720 --> 00:09:53,570
‫bem no próximo vídeo.

198
00:09:53,570 --> 00:09:54,963
‫Então, vejo você até então.

