‫Instrutor: Tudo bem, então vamos agora criar
‫esses novos usuários, com base no modelo que
‫acabamos de implementar no último vídeo.
‫Portanto, faremos a maioria das coisas relacionadas ao
‫usuário, como criar novos usuários, efetuar login
‫de usuários ou atualizar senhas no controlador de autenticação.
‫Portanto, todas as coisas relacionadas à autenticação, na verdade,
‫não estarão no controlador de usuário que
‫criamos antes, mas
‫em vez disso, criaremos um controlador de autenticação.
‫Portanto, todas as funções
‫relacionadas à autenticação irão aqui.
‫E isso fará um pouco mais de sentido mais
‫tarde, quando começarmos a usar todas as funções
‫que vou colocar aqui.
‫E agora, a primeira coisa
‫que precisamos fazer é importar nosso
‫usuário, então nosso modelo de usuário, é claro,
‫e isso está em um nível acima, deve estar em modelos e, em
‫seguida, em userModel.
‫Tudo bem.
‫Então, vamos criar e exportar nosso primeiro controlador.
‫E vou chamar isso de inscrição.
‫E então você vê que não estou chamando de criar usuário,
‫como fiz em um controlador de
‫tour, mas na verdade estou chamando de inscrição
‫porque esse é o nome que tem um pouco
‫mais de significado no contexto de autenticação.
‫Portanto, será uma função assíncrona, é claro, porque faremos
‫algumas operações de banco de dados.
‫Em seguida, solicite, responda e avance
‫como sempre, e aqui é onde criamos o novo usuário.
‫E isso é muito semelhante ao que fizemos antes.
‫Desta vez, é denominado newUser e,
‫em seguida, lembre-se de
‫como criamos um novo documento com base em um modelo.
‫Então usamos o nome do
‫modelo, claro, que neste caso é
‫User, e então usamos o método create.
‫E então tudo o
‫que precisamos fazer é passar um objeto com os
‫dados a partir dos quais o usuário deve ser criado.
‫E então, assim como antes, esses dados estão realmente em requisição. corpo.
‫E então tudo isso vai retornar
‫uma promessa, então precisamos aguardar isso, e
‫é por isso que essa função é assíncrona.
‫E vejo que aqui em cima precisamos de exportações.
‫E agora, na próxima etapa,
‫iremos enviar esse novo usuário para o cliente.
‫Então res. status, que é 201 para criado e, em
‫seguida, nosso objeto JSON.
‫Então isso é sucesso
‫novamente, e então nossa propriedade de dados que é
‫novamente chamada de
‫envelope aqui, então uma propriedade que irá conter os próprios dados.
‫E os dados agora são chamados de
‫usuário, quando antes eram chamados de
‫tour, então o que vamos enviar aqui é o newUser.
‫Salve-a e, antes de tentarmos, lembre-se de
‫que esta é uma função assíncrona e, portanto,
‫precisamos pensar sobre o tratamento de erros aqui.
‫Então, o que precisamos fazer aqui?
‫Bem, precisamos envolver toda a função
‫que acabamos de criar na função catchAsync que
‫criamos na última seção.
‫Portanto, lembre-se de como fizemos isso no tourController, onde todas
‫as funções assíncronas são agrupadas nesta
‫função catchAsync para que não tenhamos que
‫escrever o
‫bloco try catch em cada uma das funções aqui.
‫Lembra da última seção?
‫Então, na verdade,
‫vou copiar esta declaração de requerimento aqui.
‫É um pouco
‫preguiçoso às vezes, não sinto vontade de
‫escrever o mesmo código indefinidamente, então catchAsync, e
‫então precisamos encerrar isso aqui no final.
‫E agora, tudo o
‫que precisamos fazer é realmente implementar a
‫rota para que este manipulador de inscrição aqui possa ser chamado.
‫E então vamos para nosso
‫userRoutes, que na verdade já criamos algum tempo antes,
‫e já temos algumas rotas aqui.
‫Mas, na verdade, vou criar um novo aqui agora.
‫E como mencionei logo no início deste vídeo, o recurso
‫do usuário é um pouco diferente de
‫todos os outros recursos.
‫Novamente, porque realmente tem a ver com
‫todas as coisas de autenticação.
‫E então temos um controlador diferente
‫para isso, o authController, os nomes das funções também
‫têm alguns nomes
‫diferentes e, portanto, também teremos uma rota especial.
‫Digamos roteador. post, e então
‫criaremos uma rota para inscrição, então / signup, e
‫então é aqui que usaremos
‫aquela função que acabamos de criar.
‫E, claro, antes
‫de fazermos isso, precisamos exigir esse controlador de autenticação.
‫Então, vamos apenas duplicar essa
‫linha aqui e substituir o usuário em dois lugares, e aqui
‫temos nosso authController, e agora
‫vamos usá-lo. inscrever-se.
‫Como você pode
‫ver, a inscrição é realmente um ponto de extremidade especial.
‫Não se encaixa na arquitetura REST
‫da qual falamos antes, porque neste caso
‫não faz muito sentido.
‫Portanto, lembre-se de como dissemos que, em
‫alguns casos especiais, é
‫claro que podemos criar outros terminais que
‫não se encaixam 100% na filosofia REST que é basicamente implementada aqui.
‫Então isso aqui obviamente segue
‫100% a filosofia REST, onde o nome da URL não tem nada a
‫ver com a ação que é realmente executada.
‫Enquanto estiver aqui, é claro, ele tem.
‫Portanto, o nome da rota é
‫inscrição porque estamos inscrevendo usuários.
‫E também aqui implementamos todos esses warps
‫HTTP diferentes, mas aqui para
‫a inscrição, só precisamos realmente do POST.
‫Portanto, não podemos realmente obter dados da inscrição ou não
‫podemos corrigir uma inscrição, portanto, não a atualize.
‫Realmente não faz sentido e, portanto, neste caso, tudo o
‫que queremos fazer
‫é ter uma rota para
‫inscrição, onde só podemos POSTAR dados.
‫Porque, novamente, só faz
‫sentido realmente enviar dados para essa rota,
‫para que o novo usuário seja criado.
‫E teremos diferentes rotas semelhantes a esta,
‫como para login, ou para
‫redefinir senha, e todos os tipos de coisas assim.
‫E nós também manteremos essas
‫rotas aqui para aquelas em um formato mais REST,
‫pois também existe a possibilidade de um administrador
‫de sistema atualizar ou deletar ou
‫obter todos os usuários com base em seus IDs.
‫Mas cuidaremos disso mais tarde, por enquanto queremos
‫apenas implementar todas as funções
‫relacionadas à autenticação.
‫Basicamente, funções que são relevantes apenas para
‫o próprio usuário.
‫Portanto, não é um administrador que vai inscrever um usuário,
‫ou não é um administrador que vai fazer o login
‫de um usuário, mas em vez disso, é
‫o próprio usuário que vai se inscrever, ou se autenticar.
‫Ok, isso faz sentido?
‫Portanto, devemos ter tudo no
‫lugar agora, para que funcione quando criarmos nosso novo usuário.
‫Então, quando nos inscrevemos basicamente, para nosso aplicativo.
‫Então, vamos tentar isso agora.
‫Vamos apenas copiar este
‫URL, usuários e, em seguida, inscrever-se.
‫Em seguida, precisamos especificar o
‫corpo, dizemos bruto e, em seguida, JSON.
‫Ah, e também, não se esqueça, é claro, de definir
‫este como POST.
‫Então, de quais dados precisamos aqui?
‫Lembre-se, primeiro um é
‫o nome, depois o e-mail, e
‫estou colocando o meu aqui na verdade, depois a senha, então
‫vamos fazer algo aqui, realmente não importa.
‫E, novamente, falaremos sobre gerenciamento de senhas
‫um pouco mais tarde,
‫e na verdade bem no próximo vídeo.
‫Então agora este aqui deve ser o mesmo.
‫Então, passe1234, apenas como um teste.
‫E a lembrança de foto não é obrigatória,
‫então não vou fazer isso.
‫E então vamos ver agora.
‫E agora temos esse
‫erro aqui, porque eu digitei a senha incorretamente aqui.
‫Ok, então essa seria a maneira alemã de escrever isso.
‫E agora está certo.
‫Ok, de fato, temos nosso novo usuário aqui.
‫Perfeito.
‫Agora, digamos que tentamos fazer isso com um GET.
‫O que obteríamos?
‫Bem, "Esta
‫rota ainda não está definida",
‫porque na verdade
‫já meio que definimos essa rota aqui,
‫basicamente essa parte da rota,
‫deixe-me mostrar isso rapidamente, não está
‫no tourController, mas em o userController.
‫Basicamente, temos getUser aqui e
‫"Esta rota ainda não foi definida. "Então é isso que estamos recebendo, mas é
‫claro que
‫não estamos realmente interessados nisso.
‫E agora vamos salvar isso aqui, no Postman,
‫para que possamos reutilizá-lo facilmente.
‫Então inscreva-se.
‫E agora,
‫apenas para confirmar rapidamente, vamos abri-lo
‫no Compass aqui também, e ver que neste ponto
‫temos apenas passeios, então vamos aqui para o natours,
‫tente recarregar isso, e isso provavelmente está aqui, e então na verdade, agora temos
‫nossa coleção de usuários aqui.
‫Então, vamos abri-lo e, de fato, agora temos
‫nosso primeiro documento aqui.
‫Então, o usuário que acabamos de criar.
‫Agora aqui você pode ver a senha
‫simples e, portanto, é claro que isso não é o ideal.
‫E, claro, isso não é o ideal, portanto, em
‫um aplicativo da web, as
‫senhas nunca devem ser armazenadas de forma simples em um banco de dados.
‫Portanto, há muito gerenciamento de senha que precisa ser
‫feito nos bastidores, e isso é exatamente o que
‫faremos no próximo vídeo.