Tempo para a terceira tarefa neste curso.
Neste módulo, temos explorado a autenticação do usuário com muitos detalhes.
Agora, nesta atribuição,
vamos trabalhar mais na autenticação do usuário.
Vamos adicionar mais uma categoria de contas chamada como administrador.
Uma conta de administrador é uma conta super que tem
muitos privilégios de executar várias operações.
Uma conta de usuário comum só pode executar determinadas operações em nosso servidor.
Da mesma forma, uma solicitação não registrada vinda de um cliente
que não está conectado só pode executar determinadas operações em nosso servidor.
Agora, vamos modificar nosso servidor de modo
que as operações podem ser executadas por qualquer pessoa.
Você não precisa fazer login no sistema para executar operações de get nos
vários pontos finais da API de descanso, exceto o envio de comentários.
Para as operações restantes nos pontos finais da API restantes,
as operações POST colocar e excluir,
estas serão restritas para serem executadas apenas por usuários administradores,
um usuário comum não pode executar essas operações.
Obviamente, você não quer que um usuário comum envie novos pratos, ou promoções,
ou informações de líderes, ou modifique informações existentes,
ou mesmo exclua essas informações existentes.
Este deve ser o privilégio de apenas o administrador do sistema para o nosso servidor.
Além disso, garantiremos que um usuário comum possa
postar comentários sobre pratos específicos, o que é aceitável.
Da mesma forma, um usuário comum pode atualizar e excluir comentários que ele ou ela postou.
Outros usuários ou mesmo o administrador não podem atualizar ou excluir comentários postados por outro usuário.
Então, esta é outra restrição que vamos colocar em nosso servidor.
Agora, vamos em frente e examinar como vamos
implementar isso e como exatamente nosso servidor faz essas operações.
Em primeiro lugar, vou ilustrar para você como você
criaria uma conta de administrador em seu sistema.
Você vai perceber que temos que ir
nos bastidores para criar uma conta de administrador simplesmente porque,
não queremos que uma conta de administrador seja criada realizando
a operação de inscrição em nossa conta de usuários/cadastro.
Isso deixará nosso servidor vulnerável a ataques.
Assim, uma conta de administrador só pode ser configurada
nos bastidores acessando diretamente o banco de dados.
Então, vamos ver como vamos fazer
isso na ilustração que vou mostrar logo a seguir.
Agora, para examinar nosso banco de dados,
deixe-me iniciar o Mongo Ripple no prompt de comando,
e então vá para a pasta de confusão e então deixe-me
examinar os usuários que estão registrados no meu banco de dados neste momento.
Então, você pode ver que eu tenho apenas um usuário registrado.
Então, deixe-me configurar duas contas adicionais,
uma para um usuário comum,
e outra que vai ser um administrador.
Então, vamos inscrever o administrador e o segundo usuário também do nosso ponto de inscrição,
depois disso eles voltarão para o Mongo Ripple e, em seguida, configurar a conta de administrador
explicitamente modificando o registro em nosso banco de dados.
Indo para postman pin,
deixe-me inscrever dois usuários adicionais.
Então, tínhamos inscrito anteriormente um usuário com esse nome,
então eu vou registrar outro usuário no meu sistema,
e assim, um segundo usuário agora é registrado com sucesso.
Agora, deixe-me também registrar uma conta de administrador.
Então, para a conta de administrador,
configurarei o nome de usuário como administrador e, em seguida, inscreverei um usuário administrador.
Então, vemos que agora adicionamos duas novas contas ao nosso sistema.
Indo para o Mongo Ripple,
deixe-me repetir novamente o
db.user.find () e deixe-me fazê-lo bonito para que pareça mais fácil de ler.
Então, quando eu fizer isso,
você pode ver que temos uma conta de administrador aqui com o nome de usuário como administrador.
Ignore o primeiro nome e sobrenome,
vou configurar este primeiro nome e sobrenome para ser o mesmo para todos os três.
Então, temos a outra conta de usuário que configurei com o nome de usuário aqui,
e a terceira conta de usuário que já tínhamos em nosso banco de dados.
Então, agora temos três contas de usuário;
duas contas de usuário aqui
e uma conta de administrador.
Agora, é claro, você verá que nas contas de usuário,
temos esse sinalizador chamado como o sinalizador de administrador que está definido como false para
qualquer conta que está registrado neste endpoint /users/signup.
Essa é a maneira padrão que você deve configurar contas.
Você não pode permitir que um usuário configure uma conta de administrador
fazendo nada diretamente no endpoint da API restante.
Em vez disso, vamos nos bastidores e, em seguida, no Mongo Ripple,
eu vou modificar este registro para o usuário admin
dizendo db.users.update e, em seguida,
vamos fornecer o nome de usuário como admin aqui.
Então, nós vamos estar atualizando o registro de verso e então vamos dizer {$set:
recall como estávamos manipulando o MongoDB então vamos
dizer {$set: {"admin”: “true”}}.
Então, o que estamos fazendo aqui é que estamos procurando
por esta conta de usuário com o admin nome de usuário
e, em seguida, estamos configurando o sinalizador admin como true
aqui usando a opção $set.
Então, é assim que atualizamos uma conta para ser uma conta de administrador.
Então, você vê que isso modificou os resultados.
Então, vamos verificar novamente as contas.
Agora, quando você verificar a conta,
você verá que, para a conta de administrador,
o sinalizador de administrador agora está definido
como true, então é assim que você vai acabar criando uma conta de administrador.
Agora, a conta Admin como seria de esperar tem privilégios adicionais.
Então, uma vez que você concluir esta atribuição, em seguida,
você notaria que a operação get pode ser realizada por qualquer usuário
no /dishes/aspecificdishendpoint/promoções
e o /promotions/specific promotionendpoint e da mesma forma,
para os líderes em pontos também.
Mas as
operações POST, colocar e excluir nesses endpoints só podem ser executadas por usuários administradores.
Agora, além disso, o endpoint de comentários,
permitiremos que apenas um usuário registrado que tenha logado para
acessar comentários para um prato específico,
vamos permitir que um usuário conectado para postar comentários.
Nós já configuramos isso no exercício, então,
quando o usuário postar o comentário,
nós garantimos que verificamos
a autenticidade do usuário e, em seguida, quando o comentário é postado,
nós configuramos o ID do autor para o comentário usando o ID do usuário.
Então, já concluímos isso.
Mas agora, além disso,
para as operações put e delete em comentários,
apenas o usuário que enviou o comentário específico
poderá fazer operações de colocar e excluir em seus próprios comentários.
Qualquer outro usuário não pode modificar os comentários de outra pessoa.
Da mesma forma, mesmo o administrador não pode modificar os comentários de outra pessoa
ou excluir o comentário de outra pessoa.
Então, essa é a segunda parte desta tarefa que você vai fazer.
A terceira parte é que um administrador pode consultar
o ponto final /users e pedir a lista de usuários registrados,
nenhum outro usuário comum pode fazer essa consulta.
Então, esta é a outra restrição que vamos colocar lá.
Agora, para verificar se um usuário é um administrador,
primeiro verificamos se o usuário é um usuário registrado.
Então, a função de verificação do usuário que já implementamos no
authenticate.js deve ser aplicada mesmo onde você precisa verificar o admin.
Primeiro, você verifica se é um usuário verificado, depois disso,
você introduzirá outra função chamada VerifyAdmin no
arquivo authenticate.js que irá verificar para garantir que o usuário é um administrador.
Agora, para verificar se um usuário é um administrador,
tudo o que você precisa fazer é verificar o rec.user que está
no objeto de solicitação rec.user lá,
verifique se o sinalizador admin é verdadeiro ou não.
Se o sinalizador admin for verdadeiro,
você permitirá que o processo normal de prosseguir para o [inaudível] aconteça.
Se o usuário não for um administrador,
você gerará um erro e enviará uma mensagem de erro de volta para o lado do cliente.
Então, é assim que vamos lidar com a conta de usuários de administrador.
Agora, quando um usuário está tentando modificar ou excluir seus próprios comentários,
temos que verificar para ter certeza de que o autor do comentário é o
mesmo que o usuário que está tentando modificar o comentário.
Agora, o rec.user também tem o campo ID,
então você precisa verificar isso com o campo autor do comentário.
Se esses dois corresponderem,
então você permitirá que o usuário execute as operações put ou delete.
Se eles não corresponderem,
então você não permitirá que as operações put ou delete nesse comentário específico.
Então este é o outro aspecto que você
vai implementar como parte de sua terceira tarefa.
Vamos ver como todas essas coisas funcionam
usando o Postman para executar várias operações em nosso servidor.
Voltando para o Postman,
deixe-me primeiro executar uma operação GET em
pratos para apenas verificar para ver o que está no meu banco de dados.
Então, se eu executar uma operação GET nos pratos,
observe que eu não estou colocando nenhuma autenticação no cabeçalho.
A operação GET é permitida por qualquer pessoa.
Então, quando eu executar a operação GET,
eu posso ver que eu já tenho um prato com um comentário já no lugar nesse prato.
Este comentário já foi postado por este usuário.
Então, já temos um prato no sistema lá.
Então, isso é perfeitamente bom,
eu vou excluir o prato.
Agora, para excluir o prato,
obviamente essa operação não pode ser realizada por um usuário comum.
Então, deixe-me fazer login como,
para que você possa ver que eu estou fazendo login como um usuário regular.
Então, deixe-me fazer login como um usuário regular.
Então, quando eu entrar, eu vou obter o token.
Então, eu vou copiar este token e salvá-lo.
Agora, que eu tenho o meu token,
deixe-me executar uma operação DELETE nos pratos.
Então, quando eu vou para a operação DELETE.
Então, deixe-me selecionar este GET e, em seguida, fazer uma operação DELETE com os pratos.
No cabeçalho, deixe-me incluir a autorização aqui e você notaria
que quando colamos na solicitação e, em seguida, enviamos a autorização DELETE,
você notaria que ela volta imediatamente com esta mensagem aqui,
como você pode ver na visualização,
ele diz “Você não está autorizado a Realize esta operação! “
Então o código de erro é 403 proibido.
Então, esta é uma mensagem que foi gerada
pela função VerifyAdmin que você vai implementar como parte deste exercício.
Então, se o usuário não é um administrador,
então esta é a mensagem que seu VerifyAdmin
gerará e não permitirá que a solicitação vá além desse ponto.
Então, você pode ver que eu fechei a operação DELETE.
Agora, como você faz isso?
Em seu código, você viu que, a fim de aplicar o VerifyUser,
definimos Authenticate.VerifyUser nas
operações POST, PUT e DELETE.
Agora, você pode encadear o middleware um após o outro.
Então, podemos dizer Authenticate.VerifyUser vírgula
e, em seguida, você pode dizer Authenticate.VerifyAdmin,
para aplicar o VerifyAdmin logo após o VerifyUser.
Então, se você quiser que uma operação seja restrita apenas ao administrador,
primeiro faça a parte VerifyUser e, em seguida, imediatamente após isso,
aplique o middleware VerifyAdmin.
Logo depois disso. Então, se essas duas verificações,
passar com sucesso, então você vai para executar a operação.
Se a verificação VerifyAdmin falhar,
você retornará essa mensagem de erro como você vê
aqui e, em seguida, abortará a operação que parte.
Então, você retornará o próximo erro de seu VerifyAdmin,
se o usuário não for um administrador.
Então, eu demonstrei a você como você
usará a conta de usuários de administrador para restringir operações para operações PUT
, POST e DELETE.
Mesma coisa, operações POST e PUT também não será permitido em qualquer uma dessas n partes.
Agora, então deixe-me demonstrar o outro aspecto aqui.
Então, você viu que lá dentro,
quando realizamos a operação GET,
você viu que já havia um comentário que foi postado pelo nome de usuário Jogesh,
o primeiro usuário que está no meu sistema.
Agora, vou fazer login como o outro usuário.
Então, eu vou entrar como na minha segunda conta que é Muppala e, em seguida, quando eu entrar,
eu novamente obter o token.
Então, deixe-me pegar esta ficha aqui.
Deixe-me copiar esta ficha.
Agora, o que eu vou fazer é eu vou fazer um GET sobre os pratos localhost.
Então, deixe-me fazer um GET sobre os pratos localhost para mostrar-lhe o comentário específico dentro aqui.
Então, este comentário em particular com este ID.
Então, o que eu vou fazer é,
eu vou copiar essa identificação prato.
Eu também vou copiar o ID comentário a partir daqui e eu vou executar
uma operação DELETE neste prato específico
e lembrar que temos
a barra comentários barra e, em seguida, este ID comentário particular.
Agora, lembre-se que este comentário foi postado por este nome de usuário,
mas agora eu me conectei como o outro usuário com um nome de usuário diferente.
Então, quando eu executar agora a operação DELETE usando a outra conta,
você perceberia imediatamente que aqui diz:
“Você não está autorizado a excluir este comentário! “
Então diz 403, a mesma coisa.
Se você tentar fazer uma operação PUT nesse comentário específico conectado como outro usuário,
ele dirá: “Você não está autorizado a atualizar este comentário!”
Assim, tanto PUT, DELETE e UPDATE do comentário de outra pessoa não é permitido.
Então, agora, deixe-me fazer login como o administrador neste ponto e então deixe-me tentar excluir
esse comentário em particular e você veria que a mesma mensagem será gerada.
Assim, um administrador também não pode excluir ou atualizar os comentários de outra pessoa.
Então, para fazer login como administrador,
deixe-me entrar no POST aqui e então deixe-me fazer login como administrador.
Agora, lembre-se que esses tokens serão válidos por 33.600 segundos.
Então, você pode salvar esses três tokens que você gera para os três usuários.
Então, você não precisa continuar fazendo login como esse usuário específico.
Contanto que você use o token certo no cabeçalho,
suas operações funcionarão perfeitamente identificando os três usuários diferentes.
Então, deixe-me fazer login como administrador aqui.
Então, quando eu entrar como administrador,
eu recebo o token aqui.
Então, eu vou copiar e salvar este token.
Basta lembrar qual token pertence a quem quando você fizer uma cópia deste.
Agora, voltando a isso, excluir operação de comentário.
Eu vou para o cabeçalho e, em seguida, eu vou mudar isso para o token para
o administrador e, em seguida, tentar executar a mesma operação DELETE e, em seguida, você vê
que mesmo o administrador não está autorizado a excluir o comentário postado por outro usuário.
Isto é perfeitamente aceitável.
Mas vamos tentar excluir o mesmo comentário,
por este usuário que criou
esse comentário e você veria que isso pode ser feito com sucesso.
Então, vamos executar essa operação.
Então, para fazer isso, eu vou voltar e buscar o token que eu
tenho para o primeiro usuário e, em seguida, alterar o campo Autorização.
Agora, para esta operação DELETE,
eu vou mudar isso para portador,
e então este é o token para o primeiro usuário com o nome de usuário Jogesh.
Então, quando eu tento excluir esse comentário,
você notará que o comentário foi excluído com sucesso.
Então, como você pode ver nas etapas,
o comentário só pode ser excluído pelo usuário que criou esse comentário.
Agora, o próximo passo,
quando fazemos a operação DELETE nos pratos,
vimos anteriormente que se fizéssemos a operação DELETE como um usuário comum,
você recebe uma mensagem dizendo:
“Você não está autorizado a executar esta operação!”
Então, eu vou mudar este token para o token do administrador e, em seguida,
mostrar-lhe que um administrador pode executar a operação DELETE nos pratos e pote.
Então, indo para esta solicitação,
deixe-me alterar o token para ser o token para o usuário admin.
Então, quando eu executar a operação DELETE como o usuário administrador,
você notará que a operação DELETE é
bem-sucedida e, em seguida, responde de volta com a mensagem aqui.
Agora, quando eu faço um GET no endpoint pratos,
você vai notar que as operações GET mostra que meus pratos foram esvaziados.
Agora, a outra operação que você também irá implementar nesta atribuição,
é que podemos fazer uma operação GET no ponto final de usuários de barra.
Então, quando você faz uma operação GET no ponto final de usuários de barra,
você notará que se você não for um usuário autorizado,
ele dirá que você não está autorizado a executar esta operação.
Então, o localhost: 3000/users/endpoint,
agora você estará permitindo que isso seja executado somente pelo administrador.
Então, se um usuário comum,
se você fizer login como um usuário comum com o cabeçalho,
você não terá permissão para executar esta operação.
Agora, deixe-me alterar este token para o token
fora do admin e, em seguida, você verá que
o administrador terá permissão para executar esta operação.
Então, indo para o GET,
deixe-me alterar este token para o token para
o usuário admin e, em seguida, quando eu executar a operação GET sobre isso, ele retorna.
Como você pode ver, os três usuários registrados no meu sistema,
ele mostra o usuário número um,
usuário número dois e usuário número três.
Claro, observe que o hash e salt são removidos,
quando a mensagem é retornada pelo lado do servidor para o lado do cliente.
Então, as informações de hash e sal nunca serão reveladas lá fora.
Então, Mongos irá automaticamente cuidar de
filtrar essas informações antes de enviar de volta as informações do usuário.
Então, porque você não deve estar revelando as
informações de hash e sal para o mundo exterior.
Então, esta é a três informações de contas de usuário que é retornada.
Então, isso é retornado somente se você executar a operação GET
no ponto de extremidade de usuários de barra como o usuário administrador.
Se você executar a mesma solicitação que qualquer outro usuário,
isso não será permitido.
Então, novamente você vai verificar primeiro,
VerifyUser e, em seguida, verificar o VerifyAdmin e somente se for um administrador,
então esta operação pode ser realizada neste ponto final.
Então, estas são todas as várias tarefas que você fará como parte desta tarefa.
Os detalhes de como eles precisam ser feitos estão documentados nas instruções de atribuição.
Então, leia as instruções antes de prosseguir para completar a terceira tarefa.
Divirta-se completando a terceira tarefa.