Solucionado (ver solução)
Solucionado
(ver solução)
8
respostas

Autorizar o usuario depois de gerar o token

Depois que o usuario é logado na aplicação, e é gerado o token, para que o sistema permita que ele faça as operações, ele deve enviar outra requisição mas com o token no cabeçalho?

Não poderíamos dizer para o spring autenticar o usuario logo depois de gerar o token? Para evitar que mais uma requisição seja enviada...

8 respostas

Opa fala Gabriel tudo bem? Sim quando temos implementado no nosso sistema, o nosso resource server, junto com o authorization server, quando o usuario final é logado no sistema, é geredo um token, com esse token ele consegue acessar seus endpoints configurado. Depois geredo esse token, a cada requisição que vc fizer, é obrigado a passar no cabeçalho(headers) o seguinte parametro.

HttpHeaders headers = new HttpHeaders(); 
headers.append("Authorization", "bearer token gereado");
ou
headers.add("Authorization", "bearer token gereado");

sendo assim, a cada requisição está passando o token de validação para acessar seus endpoints.

Perfeito, mas vamos imaginar o seguinte cenário:

1) O usuario tenta acessar uma pagina, mas como nao está autenticado, ele é levado para a pagina de login pela aplicação do frontend.

2) Feito o login, é gerado um token no backend, e este token é devolvido.

3) Seguindo o nosso modelo da API REST, quando o token é devolvido, o responsável por redirecionar o cliente para a pagina que ele queria acessar antes? (no passo 1)

Deixa eu ver se eu entendi corretamente sua duvida, por exemplo o usuario faz quer entrar no sistema, em uma url por exemplo.

http://localhost:9000/restaurante/produtos

ele quer acessar essa url do sistema, mais ainda nao está logado certo? Quando ele tenta acessar essa página, sem estar logado, o seu front end, direciona o usuario para a pagina de login certo?

Depois ele loga no sistema e faz gera o token para ele usar a API, quando ele clicar no botão entrar sistema, vc quer que ele entre direto na pagina anterior que ele tentou acessar? que no exemplo é http://localhost:9000/restaurante/produtos

Caso for isso, não faz muito sentido o usuario tentar entrar em um sistema usando paginas fixas, geralmente todos usuarios que vão usar o sistema, entram normalmente usando a pagina de login e vai até aonde queira navegar.

Ai temos uma outra opção, quando o token é expirado, quando isso acontece, geralmente chamamos um função no front end, chamando o refresh_token para pedir um novo token valido, mais isso o usuario nem ve acontecendo, é tudo feito por de baixo dos panos.

Quando o refresh_token é expirado, ai sim o usuario é rediricionado para tela de login.

Sim, gostaria que fosse exatamente até aqui: "Depois ele loga no sistema e faz gera o token para ele usar a API, quando ele clicar no botão entrar sistema, vc quer que ele entre direto na pagina anterior que ele tentou acessar? que no exemplo é http://localhost:9000/restaurante/produtos"

Como isso poderia ser feito?

Bom isso pode ser feito por algum cache, já usei angular em aplicações que trabalhei, usei bastante o localStorage para armazenar valor de variaveis.

por exemplo no seu caso dava para fazer uma verificação, aonde chama o metodo entrar no sistema, algo com isso.

if (!access_token) { // verificando se tem o token, como não tem ele ira cair aqui dentro
LocalStorage.setItem(usar o objeto responsavel pela url que vc digitou, e gravar ela aqui);

com essa verificação irá cair aqui dentro e settar o item com o valor da url digitada por vc.

ai quando ele fizer o login é so redirecionar o usuario para pagána que vc settou no LocalStorage usando LocalStorage.getItem();

lembrando vc tem que usar o router para poder usar a pagina que vc quer ir.

https://stackoverflow.com/questions/38131293/angular-2-router-navigate

aqui tem um exemplo que vc pode se basear usando o router.

Mais a lógica é essa, verifica se o existe algum access token na hora de entrar no sistema, caso nao tenha, guarda o valor da url no localStorage, quando for fazer o login, redireciona ele depois de ter feito o login, para a pagina que está armazenada no localStorage.

aqui tem um exemplo de como pegar a url atual.

https://stackoverflow.com/questions/45184969/get-current-url-in-angular

entendi, então usando uma api rest, igual no curso, a responsabilidade de fazer isso é da pessoa do front?

solução!

Isso, sim front que deve tomar conta dessa ação

Obrigado!