‫Instrutor: Bem-vindo de volta.
‫Portanto, autenticação e autorização referem-se a
‫usuários que se inscrevem, fazem
‫login e acessam páginas ou rotas, para as
‫quais lhes concedemos permissão.
‫Então, é realmente tudo sobre os usuários.
‫E, portanto, precisamos começar implementando o modelo de usuário nesta
‫aula, para que na próxima possamos
‫criar novos usuários em nosso banco de dados.
‫Portanto, de volta ao nosso aplicativo, vamos prosseguir
‫e criar um novo arquivo para o modelo do usuário.
‫Então, é claro, em nossa pasta de modelo,
‫New File, userModel. js.
‫E, como antes,
‫começamos exigindo o pacote Mongoose.
‫Tudo bem.
‫E agora, tudo o que precisamos fazer é criar um esquema e,
‫em seguida, criar um modelo a partir dele.
‫Assim como fizemos com os
‫passeios, vamos fazer aqui agora com os usuários.
‫E na verdade, como já fizemos
‫isso antes, quero deixar isso como um desafio para vocês, certo?
‫Portanto, quero que você crie um esquema com cinco campos.
‫Então, nome, e-mail e, em seguida, uma
‫foto; o que vai ser uma corda, assim
‫como em nossas turnês.
‫Também quero um campo para
‫senha e para senhaConfirmar.
‫OK?
‫E um pouco mais
‫sobre isso mais tarde, quando eu resolver esse
‫desafio para você, mas por agora, eu realmente quero que
‫você pratique a criação desse esquema por conta
‫própria e, em seguida, crie também um modelo a partir desse esquema, certo?
‫E então, no final, você também pode exportá-lo.
‫Então, por favor, pause o vídeo neste momento, e
‫eu estarei de volta em um segundo aqui
‫para resolver este desafio para você.
‫Tudo bem.
‫Espero que você tenha concluído esse desafio.
‫E agora vou resolver isso.
‫E não se preocupe se não parecer exatamente o mesmo.
‫Você pode simplesmente adaptá-lo conforme avançamos neste vídeo.
‫Então, por meio dessa solução.
‫Então, vou chamá-lo de userSchema.
‫E, como antes, criamos um novo mangusto. Esquema.
‫E então, passamos nosso objeto de esquema
‫e começamos a definir nossos campos.
‫Então, eu quero um nome com o tipo, é claro, de String.
‫E também quero que seja exigido.
‫Portanto, sempre que um novo usuário
‫é criado, ele precisa nos dizer basicamente seu nome.
‫Portanto, vamos definir uma mensagem de erro aqui também.
‫"Diga-nos o seu nome! " Tudo
‫bem?
‫Então esse é o nome.
‫Em seguida, queremos o e-mail.
‫Tudo bem?
‫E então isso será usado para o usuário fazer o
‫login e não vamos criar uma propriedade de nome de usuário aqui, ok?
‫Então, em alguns aplicativos, você verá um nome de
‫usuário sendo usado, mas neste caso, queremos
‫mantê-lo simples aqui e simplesmente identificar os usuários por e-mail.
‫E então, novamente, este é do tipo String.
‫Também é um campo obrigatório.
‫Então, apenas uma mensagem de erro novamente.
‫Em seguida, quero que os e-mails também sejam únicos, certo?
‫Portanto, único definido como verdadeiro.
‫E isso basicamente porque esse e-mail
‫é, obviamente, o identificador exclusivo de cada usuário, certo?
‫Agora, por padrão, os e-mails devem ser exclusivos, certo?
‫Mas vamos ter 100% de certeza de
‫que não haverá
‫contas com o mesmo endereço de e-mail, certo?
‫Agora também podemos especificar outra opção de tipo de esquema
‫aqui, que está em minúsculas.
‫Então esse é um novo.
‫E não é um validador.
‫Tudo o que vai fazer
‫é basicamente transformar o e-mail em letras minúsculas.
‫Então, se alguém disser algo como Jonas @ Gmail ou qualquer outra coisa,
‫isso será convertido tudo para letras minúsculas.
‫OK?
‫E agora, finalmente, também queremos validar o
‫endereço de e-mail.
‫Então, basicamente testando se o
‫e-mail fornecido corresponde ao formato de e-mail comum, certo?
‫Por exemplo, novamente jonas @ gmail. com seria um email
‫válido, mas
‫por exemplo, assim, não seria.
‫Ou assim.
‫E então, para isso, precisamos basicamente criar
‫nosso próprio validador.
‫Agora não vamos criar nosso próprio validador
‫para isso, mas em vez disso, vamos usar aquele
‫pacote de validador que mostrei antes do npm, certo?
‫Então lembre-se aqui no tourModel, na verdade eu
‫mostrei este módulo aqui, mas
‫não acabamos usando porque
‫não era muito útil em nosso caso.
‫Mas agora, vai ser muito útil,
‫então vou seguir em frente e copiá-lo aqui,
‫ok, para que possamos usá-lo diretamente em nosso esquema.
‫Então, agora para criar nosso validador
‫customizado, usamos validate, lembra?
‫E então passamos a mensagem anti-erro
‫da função, assim como com nossos outros validadores.
‫E para verificar se um email
‫é válido, tudo o que precisamos fazer é chamar o método
‫isEmail no objeto validador, ok?
‫Isso, novamente, vem da documentação,
‫que mostrei antes, quando usamos este módulo pela primeira vez.
‫E assim, sempre que precisar de um validador personalizado,
‫você pode ir em frente e verificar a
‫documentação e descobrir se há uma boa função para o seu caso de uso.
‫Portanto, neste caso, é o validador. E-mail, e
‫nossa mensagem de erro
‫será "um e-mail válido", certo?
‫E no próximo vídeo, quando vamos criar
‫usuários a partir deste modelo, vamos testar tudo isso para
‫ver se funciona.
‫Em seguida, também quero que o usuário possa
‫basicamente fazer upload de uma foto.
‫E vamos armazenar isso simplesmente em uma String.
‫Mas não é obrigatório, ok?
‫Portanto, uma foto geralmente é opcional na maioria dos aplicativos da web,
‫então faremos o mesmo aqui.
‫Então, se o usuário quiser fazer upload
‫de uma foto, ela será armazenada em algum lugar em
‫nosso sistema de arquivos e o caminho para essa
‫foto será armazenado neste campo de foto, ok?
‫Então é semelhante ao que tínhamos aqui.
‫Lembre-se, temos, sim,
‫temos imageCover e, portanto,
‫também é simplesmente o caminho do
‫local em nosso sistema de arquivos
‫onde a imagem é realmente carregada.
‫Tudo bem?
‫Então essa é a foto.
‫E agora precisamos de senha.
‫E a senha deve ser, novamente, do tipo String.
‫Isso não é correto.
‫E claro que a senha é obrigatória, certo?
‫Tão verdade.
‫"Forneça uma senha. "E
‫também vamos impor uma regra de senha muito simples,
‫que é que uma senha deve ter
‫pelo menos oito caracteres.
‫Então, como fazemos isso?
‫Bem, isso é muito fácil.
‫Tudo o que precisamos fazer é
‫minlength e defini-lo como oito neste caso.
‫E essa é realmente a única regra
‫de senha que vamos impor.
‫E muitos aplicativos têm todas essas regras
‫malucas, como pelo menos um número e um caractere e um símbolo,
‫mas não vamos implementar nada disso
‫aqui porque, na verdade,
‫descobriu-se que isso não é realmente eficaz, ok?
‫Normalmente, as senhas mais seguras
‫são as mais longas, ok,
‫e não aquelas com símbolos e caracteres malucos e
‫tudo mais.
‫Isso é o suficiente para a senha por enquanto,
‫mas vamos criar alguns campos mais específicos aqui
‫para a senha quando começarmos a gostar de gerenciar senhas no
‫banco de dados, ok?
‫Mas por agora, isso é o suficiente aqui.
‫E agora é passwordConfirm.
‫Então você sabe que normalmente, ao criar uma nova conta
‫em algum aplicativo da web, você sempre
‫precisa inserir sua senha e depois confirmá-la apenas para ter certeza de que
‫são as mesmas.
‫E é para isso que serve este campo.
‫É claro que também é do tipo String.
‫E, claro, também é necessário.
‫OK.
‫E novamente, vamos criar mais algumas propriedades aqui
‫na opção de tipo de esquema um pouco mais tarde, ok?
‫Especificamente, validadores para ver se a senha de
‫confirmação é realmente a mesma que a senha principal, certo?
‫Mas, por enquanto, esse esquema é realmente suficiente
‫e, portanto, tem esses campos que pedi para você
‫criar no desafio.
‫E agora, na verdade, tudo o que precisamos fazer é seguir
‫em frente e criar o modelo a partir do esquema.
‫Então o usuário, com U maiúsculo,
‫apenas para seguir aquela convenção de que as
‫variáveis do modelo geralmente estão
‫sempre com letra maiúscula, depois mangusto. model, e então passar o nome do model
‫e, claro, queremos que este seja
‫chamado de User e criado a partir do userSchema que criamos antes.
‫E então módulo. exportações definidas para o usuário.
‫E é isso.
‫Esse é o nosso userSchema simples que
‫nos permitirá começar a criar usuários
‫bem no próximo vídeo.
‫Então, vejo você até então.