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

[Dúvida] Middleware

Opa, estou com uma dificuldade.

O meu middleware do HttpClient não está sendo executado...

Bibliotecas e código exatamente igual ao do professor nas aulas, mas de alguma forma não está executando o middleware.

Quando acesso a página do /api/refresh, um novo token não é criado, mas, após a primeira tentativa, recebo o "401, não autorizado". refresh.js

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

const REFRESH_TOKEN = 'REFRESH_TOKEN'

const controllers = {
    async storeRefreshToken(req, res) {
            const ctx = { req, res}
            console.log(req.body)

            nookies.set(ctx, REFRESH_TOKEN, req.body.refresh_token, {
                httpOnly: true,
                sameSite: 'lax'
            })
            //Same site Lax - Garantir que somente o domínio atual terá acesso a esse token

            res.json({
                data: {
                    message: 'Stored with Success'
                }
            })

    },
    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]
        console.log(refresh_token)

        const refreshResponse = await HttpClient(`http://localhost:4000/api/refresh`, {
            method: 'POST',
            body: { 
                refresh_token
            }
        })

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

            tokenService.save(refreshResponse.body.access_token,ctx)
            // console.log(refreshResponse.body.refresh_token)

            res.status(200).json({
                data: refreshResponse.body.data
            })
        } else {
            res.status(401).json({
                status: 401,
                message: 'Não autorizado'
            })
        }
    } 

}

const controllerBy = {
    POST: controllers.storeRefreshToken,
    GET: controllers.regenerateTokens
}

export default function handler(req, res) {
    if (controllerBy[req.method]) return controllerBy[req.method](req, res)

    res.status(404).json({
        status: 404,
        message: 'Not found'
    })
}

Alguma funcionalidade do próprio Next foi alterada quanto ao tratamento desses casos?

1 resposta
solução!

Olá Rafael, tudo bem?

Pelo que entendi, você está tendo dificuldades com o middleware do HttpClient que não está sendo executado. É difícil dizer com certeza o que pode estar causando esse problema sem mais informações, mas uma possibilidade é que o middleware esteja sendo chamado em um momento incorreto ou que o endpoint não esteja configurado corretamente.

Quanto à sua pergunta específica sobre alguma funcionalidade do Next.js ter sido alterada em relação ao tratamento desses casos, não tenho conhecimento de nenhuma mudança recente que possa estar afetando o seu código.

Sugiro que você verifique se o endpoint está sendo chamado corretamente e se todas as configurações do middleware foram realizadas de acordo com o que foi ensinado nas aulas.

Espero ter ajudado e bons estudos!