Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Problema ao salvar o refresh token

Olá pessoal! Estou tendo problemas em salvar e pegar o refresh token, fiz diversos testes aqui na aplicação, e me parece que o problema está na hora de salvar o cookie com o nookies. O refresh token vem pela função storeRefreshToken, ele aparece no console.log da linha 9, mas na hora de usar o nookies.set, quando eu tento pegar os cookies com o nookies.get ele não vem. Não sei se estou fazendo algo errado ou se é alguma configuração da minha máquina.

import nookies from 'nookies';
import { HttpClient } from '../../src/infra/HttpClient/HttpClient';
import { tokenService } from '../../src/services/auth/tokenService';

const REFRESH_TOKEN = 'REFRESH_TOKEN_NAME';

const controllers = {
  async storeRefreshToken(request, response) {
    const ctx = { request, response };
    console.log('handle: ', request.body.refresh_token);

    // Mais sobre sameSite: 'lax' -> https://support.cloudflare.com/hc/pt-br/articles/360038470312-Como-funciona-a-intera%C3%A7%C3%A3o-de-cookies-do-SameSite-com-a-Cloudflare
    nookies.set(ctx, REFRESH_TOKEN, request.body.refresh_token, {
      httpOnly: true,
      sameSite: 'lax'
    });

    response.json({
      data: {
        message: 'Stored with Success!',
        cookies: nookies.get(ctx),
      }
    });
  },

  async displayCookies(req, res) {
    const ctx = { req, res };
    res.json({
      data: {
        cookies: nookies.get(ctx),
      }
    });
  },

  async regenerateTokens(req, res) {
    const ctx = { req, res };
    const cookies = nookies.get(ctx);
    const refresh_token = cookies[REFRESH_TOKEN];

    const refreshResponse = await HttpClient(`${process.env.NEXT_PUBLIC_BACKEND_URL}/api/refresh`, {
      method: 'POST',
      body: {
        refresh_token,
      }
    });

    console.log('cookies', cookies[REFRESH_TOKEN]);

    if(refreshResponse.ok) {
      nookies.set(ctx, REFRESH_TOKEN, refreshResponse.body.data.refresh_token, {
        httpOnly: true,
        sameSite: 'lax',
      });

      tokenService.save(refreshResponse.body.data.access_token, ctx);

      res.json({
        refreshResponse,
      });
    } else {
      res.json({
        status: 401,
        message: 'Not authorized.',
      })
    }
  }
}

const controllerBy = {
  POST: controllers.storeRefreshToken,
  GET: controllers.regenerateTokens,
}
// GET: controllers.displayCookies, // Metodo criado somente para testar, não deve ser implementado numa aplicação real.

export default function handler(request, response) {
  if(controllerBy[request.method]) {
    return controllerBy[request.method](request, response);
  }

  response.status(404).json({
    status: 404,
    message: 'Not Found',
  })
}
1 resposta
solução!

Oi Thiago, tudo bem?

Vi que você finalizou o curso, que ótimo! . Mas irei responder com base no que você mandou.

Pelo que entendi, você está tendo problemas em salvar e pegar o refresh token em sua aplicação Next.js. Pelo código que você compartilhou, parece que o problema pode estar na configuração do cookie com o nookies.

Uma possível solução seria verificar se o cookie está sendo salvo corretamente no navegador. Você pode fazer isso acessando as ferramentas de desenvolvedor do seu navegador e verificando se o cookie está presente na aba "Application" ou "Armazenamento".

Outra sugestão seria verificar se o nome do cookie está correto. Certifique-se de que o nome do cookie definido em REFRESH_TOKEN é o mesmo que está sendo usado em nookies.get(ctx).

Caso essas sugestões não resolvam o problema, pode ser necessário verificar outras partes do código para identificar o erro.

Um abraço e bons estudos.