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!
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: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 objetoHeaders
, pero este enfoque debería funcionar en la mayoría de los casos.