‫-: Então, após a atualização, vamos permitir que o usuário
‫atual basicamente exclua sua conta.
‫Agora, quando um usuário decide excluir sua
‫conta, na verdade não excluímos esse documento do banco de dados.
‫Mas, em vez disso, apenas definimos a conta como inativa.
‫Para que o usuário possa em
‫algum momento no futuro reativar a conta e também para
‫que possamos basicamente acessar a conta no
‫futuro, mesmo que oficialmente, digamos que ela tenha sido excluída.
‫OK?
‫Portanto, para implementar isso, primeiro
‫precisamos criar uma nova propriedade em nosso esquema.
‫Então, vamos
‫lá.
‫E agora queremos
‫ter um campo chamado ativo.
‫OK.
‫Que deve ser do
‫tipo Booleano.
‫Ok, e por padrão isso
‫vai
‫ser verdade.
‫Portanto, qualquer usuário criado como
‫novo é, obviamente, um usuário ativo
‫e, portanto, o Booleano é definido como verdadeiro.
‫Além disso, não queremos mostrar isso na saída, ok.
‫Porque basicamente queremos ocultar
‫esse detalhe de implementação do usuário.
‫OK?
‫E então não queremos que ninguém
‫saiba que esta sinalização, então esta sinalização ativa está aqui, ok.
‫Portanto, dizemos selecionar e definir como falso, tudo bem.
‫E então,
‫para excluir o usuário agora, tudo
‫o que precisamos fazer é
‫basicamente definir o sinalizador ativo como falso.
‫OK.
‫Então, vamos criar essa função aqui,
‫exportações. deleteMe, então
‫era updateMe e
‫agora é deleteMe e
‫então
‫já sabemos que estamos usando um catchAsync aqui, certo?
‫E então o Async, porque
‫basicamente já sabemos que vamos atualizar o usuário.
‫Portanto, o pedido responde
‫a seguir.
‫Portanto,
‫aguarde o usuário. localizar por ID e
‫atualizar.
‫Ok, e novamente, é claro
‫que só funciona para usuários conectados e,
‫portanto, o ID do usuário é convenientemente armazenado quando solicitado. do utilizador. Eu iria.
‫e os dados que queremos atualizar estão
‫simplesmente ativos
‫e configurados como falsos.
‫Tudo bem.
‫Agora, enviar a resposta também é muito fácil.
‫Usamos o código
‫204 para deletados, o que fará com que no Postman
‫nem mesmo vejamos essa resposta, ok.
‫Mesmo assim, enviamos junto com a
‫solicitação, pois essa é sempre a melhor prática.
‫Portanto, ainda é um sucesso e lembre-se de
‫que não enviamos nenhum dado.
‫Portanto, basta definir como não.
‫Tudo bem, e agora, é claro, adicione-o também
‫a todas as rotas aqui.
‫Então isso é bem parecido.
‫Então deleteMe, aqui deleteMe também e agora
‫estamos usando o método
‫delete http.
‫Ok, e novamente, não
‫vamos realmente excluir um usuário do banco de dados.
‫Mas, desde que o usuário não esteja mais acessível em qualquer lugar, ainda não
‫há problema em usar este método http aqui.
‫Tudo bem, então vamos experimentar agora.
‫Ok, embora não estejamos 100% prontos
‫ainda, vamos tentar isso agora.
‫Tudo bem, então deleteMe e é
‫uma rota protegida e por isso
‫precisamos estar logados e então vamos
‫criar
‫nosso cabeçalho de
‫autorização, Bearer Token
‫e, claro, este e é realmente isso.
‫Não precisamos passar nenhum dado no corpo.
‫Não precisamos passar nenhum dado no URL.
‫Tudo bem, porque, novamente, os únicos dados necessários são
‫o ID do usuário atual e aquele
‫não está codificado dentro de nosso token da web adjacente.
‫OK?
‫Então, o que também precisamos fazer é excluir e sim, isso
‫deve funcionar agora.
‫Portanto, antes de fazermos isso,
‫vamos obter a lista de todos os usuários.
‫Tudo bem, então o que estamos excluindo agora
‫é este último.
‫Então, esse que acabamos de criar na última aula.
‫Ok, e estamos
‫trabalhando com este porque é o último que efetuou login
‫e, portanto, é este token aqui que está
‫agora armazenado em nossa variável de token.
‫Ok, e quando agora estamos
‫excluindo o usuário, isso será baseado no ID vindo deste token.
‫Então, vamos tentar isso agora.
‫E, de fato, recebemos nosso 204.
‫E agora estou interessado
‫em ver se a propriedade select aqui mudou.
‫E realmente parece exatamente o mesmo aqui.
‫E isso porque não estamos
‫vazando o campo de seleção para o usuário.
‫E então realmente precisamos ver isso aqui.
‫Ok, de fato temos active aqui definido como falso.
‫Ok, é isso que eu queria dizer antes.
‫Portanto, não estamos vazando os campos ativos para o
‫usuário, não o campo de seleção.
‫Tão ativo só é visível para nós aqui na
‫bússola, mas não para o usuário.
‫Agora, como última etapa, é
‫claro que não queremos mostrar os usuários inativos
‫nesta saída, certo.
‫E como você acha que poderíamos implementar isso?
‫Bem, vamos usar algo que é antigo, sobre o
‫qual falamos há duas ou três seções, que
‫é o middleware de consulta, certo.
‫Portanto, o middleware de consulta é perfeito para
‫isso porque agora podemos basicamente adicionar uma etapa
‫antes de qualquer outra consulta que estivermos fazendo
‫em algum lugar em nosso aplicativo.
‫Então, vamos ao nosso modelo de usuário aqui
‫e adicionar esse middleware aqui.
‫Então userSchema. pré, então algo que acontecerá antes de uma consulta e
‫essa consulta será um achado.
‫Ok, então isso é o que torna esse middleware de consulta.
‫Então uma função regular porque lembre-se
‫que do contrário não teremos acesso à discórdia ou
‫pelo menos ela não terá
‫o valor que esperamos
‫que tenha.
‫E lembre-se de que aqui, na verdade, usamos uma expressão regular antes,
‫basicamente para dizer que queremos
‫que essa função de middleware se aplique a
‫todas as consultas que começam com find.
‫Portanto, não apenas encontre, mas também coisas como localizar
‫e atualizar, localizar e excluir e todas as consultas desse tipo.
‫Ok, então usamos uma expressão regular procurando
‫por palavras ou strings que começam com find.
‫Então é isso que este símbolo faz.
‫E, em seguida, encerre a expressão regular.
‫Então, um muito simples.
‫Este é o que até eu posso
‫escrever sem ir primeiro ao Google
‫e tentar encontrá-lo lá.
‫Ok, então lembre-se que este
‫é um middleware de consulta e, portanto, aponta
‫para a consulta atual.
‫Ok, vamos voltar rapidamente aqui
‫para ver como funciona.
‫Portanto, temos
‫todos os usuários aqui e aqui, é claro, temos uma consulta de pesquisa.
‫E agora, antes que
‫a consulta seja realmente executada, queremos adicionar algo a ela.
‫Queremos apenas encontrar documentos que tenham a
‫propriedade active definida como true.
‫Tudo bem, então é fácil.
‫Aqui está.
‫E
‫então isso. localizar e, em seguida, é claro, nosso objeto de filtro apenas
‫documentos com ativo
‫definido como verdadeiro.
‫E é isso.
‫Chame o próximo middleware e pronto.
‫Ok, e se agora fizermos a mesma
‫consulta, esta última não deve mais aparecer, porque novamente está com o ativo definido
‫como falso.
‫E, portanto, não vai corresponder à consulta
‫que acabamos de escrever.
‫Ok, agora não temos nenhum usuário aqui
‫e acho que é porque os outros eles não têm
‫explicitamente a propriedade ativa definida
‫como true.
‫E então vamos fazer o que realmente fizemos naquela outra seção
‫onde dizemos que ativo não deve ser falso.
‫Ok, então usamos o
‫operador não igual a e,
‫claro, deve estar em seu próprio objeto.
‫Portanto, não é igual a falso.
‫Ok, então isso é bem diferente aqui neste caso.
‫Tudo bem, então todos os documentos
‫onde ativo não é igual a falso agora devem aparecer e
‫os outros dois devem estar de volta.
‫E, de fato, aqui estão eles.
‫Ok, é assim que basicamente excluímos nossos
‫usuários, embora não os excluamos efetivamente do banco de dados.
‫Ok, então não estamos excluindo documentos, estamos
‫apenas marcando-os como inativos.
‫Ok, vamos salvar rapidamente isso aqui.
‫Exclua o usuário
‫atual.
‫Ótimo e com isso nós realmente concluímos
‫a parte de autenticação e autorização desta
‫seção.
‫Então, tudo que estava relacionado a esses
‫tópicos e também aos usuários, como atualizar e excluir usuários.
‫Isso também faz parte da autenticação
‫e da autorização.
‫Agora, no restante desta seção,
‫falaremos sobre segurança porque, é claro, isso
‫também está relacionado à
‫autenticação.
‫Ok, então vamos falar
‫sobre algumas das melhores práticas e, em
‫seguida, também implementar algumas delas em nosso projeto.