Vou deixar aqui um repositório para você conferir: (https://github.com/wellingtonrodriguesbr/pollify-api/blob/main/src/http/controllers/users/authenticate-controller.ts)
Aqui vai um resumo do funcionamento de tokens:
- O token expira mais rápido e é usado pelo front-end nos cabeçalhos das requisições (Bearer Token).
- O refresh token dura mais e é guardado nos cookies do lado do servidor.
No axios por exemplo, usamos os interceptors para interceptar requisições e respostas. Se a resposta falhar devido ao token expirado, a API precisa de uma rota para gerar um novo token usando o refresh token. O axios então tenta a requisição novamente com o novo token, garantindo que dê sucesso. Se ficou muito confuso, pode perguntar novamente que tento ajudar.