es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Consulta de RTK – ¿cómo acceder a las cabeceras?

Tengo una API de RTK Query que funciona y lee desde un backend que, después de un inicio de sesión exitoso, envía el token en el carga útil.

El backend API ha cambiado y ahora el token viene en el encabezado Authorization de la respuesta y no puedo descubrir cómo leerlo.

Esto es lo que tenía antes, en mi reductor. Usé un emparejador para cuando se cumplía la solicitud y guardaba el token en la carga útil:

// reducer.js
const authReducer = createSlice({
  // ...
  extraReducers: (builder) => {
    builder.addMatcher(backendApi.endpoints.login.matchFulfilled, (state, { payload }) => {
      // save the payload.token in localstorage
    }
  }
});

Parece que obtener los encabezados no es sencillo y en realidad no puedo encontrar el encabezado Authorization al intentar obtener los encabezados de la solicitud:

// reducer.js
const authReducer = createSlice({
  // ...
  extraReducers: (builder) => {
    builder.addMatcher(backendApi.endpoints.login.matchFulfilled, (state, { meta }) => {
      const headers = meta.baseQueryMeta.response.headers; // this is a Headers {} object
      console.log(headers.get('content-type')); // prints application/json; charset=utf-8
      console.log(headers.get('authorization')); // prints undefined
    }
  }
});

Cuando intento depurar e imprimir todos los encabezados con console.log(Array.from(headers)), esto es lo que obtengo:

[
  [
    'cache-control',
    'max-age=0, private, must-revalidate'
  ],
  [
    'content-type',
    'application/json; charset=utf-8'
  ]
]

Es muy extraño porque la respuesta tiene muchos más encabezados, pero no puedo acceder a ellos.

¿Alguna orientación aquí? ¿Quizás no es posible leer los encabezados de esta manera?

¡Gracias de antemano!

Tags:  ,

Answer

  1. Avatar for davy.ai

    Para acceder al encabezado Authorization en la respuesta de su API de consulta de RTK, puede modificar su comparador de la siguiente manera:

    const authReducer = createSlice({
      // ...
      extraReducers: (builder) => {
        builder.addMatcher(backendApi.endpoints.login.matchFulfilled, (state, { meta }) => {
          const authorizationHeader = meta.baseQueryMeta.response.headers.get('Authorization');
          console.log(authorizationHeader); // imprime su token
        }
      }
    });
    

    Esto debería permitirle acceder al encabezado Authorization y recuperar el token de la respuesta. Es posible que ciertos encabezados no sean accesibles a través del objeto Headers, pero este enfoque debería funcionar en la mayoría de los casos.

Comments are closed.