Autenticação no React

Usando Django REST Framework e JWT

João Gabriel Machado
LICA
4 min readJul 30, 2019

--

Autenticação pode ser uma coisa simples de se fazer, mas para usuários iniciais pode se tornar uma dor de cabeça (como acabou sendo para mim no começo), com isso, resolvi criar este artigo para ajudar quem está começando ou já tem experiência, mas não conheça sobre React ou até mesmo Django REST.

Instalando as dependências

Para auxiliar neste artigo, eu criei um repositório no GitHub, lá estão todos os passos necessários para que o projeto funcione, junto com as dependências necessárias para que o projeto rode com tudo certo.

Django REST Framework

Django REST Framework é uma ferramenta poderosa e flexível para a construção de APIs Web.

Quem já desenvolveu em Django sabe como é fácil a manipulação do Banco de Dados e de objetos, e isso não é diferente com essa ferramenta! Objetos são facilmente manipuláveis e possuem uma forma de consulta aos seus valores muito fácil.

A ideia com Django REST é muito semelhante na manipulação de suas views, mas aqui, ao invés de retornar um HTML preenchido com os dados, como é no Django comum, você retorna um JSON contendo todas as informações solicitadas naquela URL.

Para a autenticação, iremos usar o Simple JWT, um plugin de autenticação de JSON Web Token para o Django REST Framework.

Quem quiser saber mais sobre o JWT, recomendo esse artigo do Vitor Freitas que mostra o que está por trás daquele monte de letras e números.

Com o Simple JWT, nós podemos criar uma url que retorne o Token de acesso e o Token de recarga após o usuário informar o seu usuário e senha.

Link para esse arquivo no repositório

Com essa url, é possível acessar o /api/token/ para realizar o login de sua aplicação front-end. Falando em aplicação front-end, vamos falar sobre o React.

React

No React, que é uma interface JavaScript para construir interfaces de usuário, eu vou construir somente uma página que conterá o formulário de login e de cadastro, é um código bem simples, somente para entendermos como funciona a conexão com o back-end.

Nessa página eu chamei o módulo de Login.

Arquivo App que contêm os outros módulos citados acima

No módulo de Login, teremos o formulário que pede para o usuário digitar um username e uma senha.

Página de Login e seu formulário

Bem, temos o formulário, mas agora precisamos mandar as informações que coletarmos para o servidor, certo!? Para isso, precisamos criar um método na classe Login que seja chamado toda vez que o botão de enviar for chamado. Para isso, criei o método chamado login (sim, eu não tenho criatividade).

Como é possível ver na linha 4, estamos criando a requisição e na linha 6 é passado os atributos necessários para se fazer o login, que são o username e a senha informados pelo usuário.

Para a requisição ao servidor, eu estou usando a fetch API, que promete ter um conjunto de funcionalidades mais poderosos e flexíveis. Essa API, trabalha com o conceito de Promises do JavaScript. Promises representam uma eventual completude (ou falha) de uma operação assíncrona, e seu valor resultante.

Na linha 12, podemos ver a URL para o nosso servidor back-end. Na linha seguinte, nós tratamos a resposta do servidor, caso seja ok — com o código HTTP 200 — então nós sabemos que tudo ocorreu bem com nossa requisição, caso não seja 200, lançamos um erro para ser exibido ao usuário.

Se a requisição for bem sucedida, precisamos salvar nossos tokens no armazenamento local de quem está acessando nossa página, para isso, usamos o localStorage para salvar esses tokens localmente. O retorno do servidor é algo como:

Exemplo de Tokens retornados pelo servidor

Mas ainda precisamos extrair o token de dentro do JSON retornado! Temos que pegar o que está dentro dele para salvarmos no lado do cliente. Para isso, usamos o JSON.parse, que transforma o Json em uma lista, que é mais fácil de manipular.

Salvando os Tokens no navegador do cliente

Fiz o Login, e agora?

Agora que você tem os tokens necessários para que o Login do cliente seja feito, precisamos usar esse Token para pegar as informações confidenciais do servidor, certo?

Para isso, no Header da requisição precisamos passar o access_token:

Modelo de requisição passando o token de acesso

Como é possível ver na linha 10, estamos passando o token junto com o Header na requisição HTTP. O formato padrão desse Header é o que você encontra nessa mesma linha, com a chave sendo “Authorization” e o valor sendo “Bearer ” seguido do token de acesso.

E chegamos ao final

Com tudo que vimos até aqui nós conseguimos realizar o login de nosso usuário e também requisitar informações que precisem de um usuário ativo.

Até o próximo post, galera!

--

--

João Gabriel Machado
LICA

Computer Science Student at UFAL. Web Developer in Djando and learning React.