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',
})
}