Aula 24 - Golang - Fiber - React - Autenticação de Usuários

Vamos pegar o usuário logado no Home.tsx. Para isso, vamos ter que chamar o endpoint do user, e utilizaremos o gancho useEffect do react.

src/pages/Home.tsx


import React, { useEffect } from 'react';
import axios from 'axios';
const Home: React.FC = () => {
  useEffect( () => {
  (
    async () => {
      const response  = await axios.get('user');
      console.log(response)
    }
  )();
  }, [])
  return (
    <div className="container">
      <h1>You are not logged in!</h1>
    </div>
  );
}

export default Home;
Vamos ajustar a configuração de acesso para aceitar credenciais, pois transmitimos o cookie do backend e precisamos armazená-lo em locais seguros, caso contrário, ele não funcionará corretamente. Vamos ajustar a configuração de acesso para aceitar credenciais, pois transmitimos o cookie do back.

src/index.tsx


import React from 'react';
import ReactDOM from 'react-dom/client';
import './index.css';
import App from './App';
import reportWebVitals from './reportWebVitals';
import axios from 'axios';

axios.defaults.baseURL = `${process.env.REACT_APP_API_URL}/api/`; 
axios.defaults.withCredentials = true;
const root = ReactDOM.createRoot(
  document.getElementById('root') as HTMLElement
);
root.render(
  <React.StrictMode>
    <App />
  </React.StrictMode>
);

// If you want to start measuring performance in your app, pass a function
// to log results (for example: reportWebVitals(console.log))
// or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals
reportWebVitals();
Portanto, com essas configurações, vamos tentar fazer o login novamente. Após o login, somos redirecionados à página principal onde é possível verificar que o usuário foi recuperado com sucesso através do console.log() que colocamos.

Gestão de Estado e Tratamento de Erros

No código anterior do Home.tsx, a página simplesmente exibia uma mensagem estática informando que o usuário não estava logado. No entanto, essa abordagem não reflete dinamicamente o estado de autenticação do usuário. Portanto, realizamos algumas alterações significativas para melhorar a interação e fornecer feedback em tempo real sobre o status do login. Primeiro, introduzimos o hook useState para gerenciar o estado da mensagem que será exibida ao usuário. Isso permite que a página responda adequadamente, mostrando uma mensagem personalizada com o nome do usuário quando ele está logado ou uma mensagem de erro quando o login falha. Além disso, empregamos um bloco try...catch dentro do useEffect para tentar buscar os dados do usuário com a função axios.get. Se a requisição for bem-sucedida, o nome do usuário é extraído da resposta e utilizado para compor uma saudação personalizada que é definida como estado da mensagem. Se ocorrer um erro na requisição (como quando o usuário não está logado ou a sessão expirou), capturamos esse erro no bloco catch e configuramos a mensagem de estado para indicar que o usuário não está logado. Essas mudanças não só tornam a página mais interativa e útil, mas também introduzem boas práticas de programação, como o tratamento de erros e a manipulação de estados, essenciais para aplicações em React modernas. Abaixo está o código atualizado que implementa estas melhorias:

src/pages/Home.tsx


import React, { useEffect, useState } from 'react';
import axios from 'axios';

const Home: React.FC = () => {
  const [message, setMessage] = useState('');

  useEffect(() => {
    (async () => {
      try {
        const response = await axios.get('user');
        const user = response.data;
        setMessage(`Hi ${user.first_name} ${user.last_name}`);
      } catch (e) {
        setMessage('You are not logged in!');
      }
    })();
  }, []);
  return (
    <div className="container">
      <h1>{message}</h1>
    </div>
  );
}

export default Home;
Na próxima aula, focaremos na implementação do botão de logout e na lógica associada ao processo de deslogar um usuário. Abordaremos como adicionar este componente essencial em nossa interface de usuário usando React e garantiremos que ele funcione de forma segura e eficiente. Vamos explorar como gerenciar o estado de sessão do usuário, garantindo que todas as informações de sessão sejam limpas corretamente para evitar vulnerabilidades de segurança. Isso não só melhora a usabilidade de nossa aplicação, mas também reforça a importância de práticas de segurança robustas no desenvolvimento web.

Prepare-se para aprender técnicas práticas que você poderá aplicar em qualquer aplicação web moderna!

Com isso, encerramos essa aula.

Na próxima aula, seguimos na construção do frontend, e vamos fazer a parte de logout

Código da aula: Github

É isso!

A gente se vê na próxima.

Até lá!

\o/

Bons estudos. ;)