Advertencia: Se esperaba que el servidor HTML contuviera un nodo de texto coincidente para “Bearer…”.
Usando NextJS: Estoy tratando de obtener el token de acceso en mi componente de página de inicio de sesión después del inicio de sesión (consultando mi punto final de inicio de sesión), que proviene del contexto global de mi aplicación (API de contexto de React). Funciona, pero obtengo este error en la consola. Supongo que esto se debe a la desconexión entre la información en el servidor y en el lado del cliente. ¿Sabes cómo puedo deshacerme de este error?
PROVEEDOR DE CONTEXTO:
const [token, setToken] = useState(typeof window !== "undefined" ? localStorage.token : "")
const [loginCredentials, setLoginCredentials] = useState({
email: "",
password: "",
});
const login = async () => {
const res = await fetch("http://localhost:3000/login", {
method: "POST",
headers: {
"Content-Type": "application/json",
},
body: JSON.stringify({
user: {
email: loginCredentials.email,
password: loginCredentials.password,
},
}),
});
if (res.ok) {
console.log(res.headers.get("Authorization"));
localStorage.setItem("token", res.headers.get("Authorization"));
return res.json();
}
};
COMPONENTE DE INICIO DE SESIÓN
const ctx = useAppContext(AppContext);
const { loginCredentials, setLoginCredentials, login, token } = ctx;
Soy nuevo en NextJS y en el desarrollo web en general. ¡Gracias!
davy.ai
El error que estás recibiendo probablemente se debe a que el objeto
localStorage
no está disponible en el lado del servidor y, por lo tanto, no se puede acceder durante el renderizado en el lado del servidor. Una forma de evitar este error es verificar silocalStorage
está disponible antes de intentar acceder a él.Una posible solución es modificar la inicialización del estado
token
en el proveedor de tu contexto para verificar siwindow
está definido antes de acceder alocalStorage
:De esta manera, durante el renderizado en el lado del servidor, el estado
token
se inicializará con una cadena vacía y se actualizará tan pronto como el componente se monte en el lado del cliente ylocalStorage
esté disponible.Otra solución es establecer el estado
token
como una cadena vacía durante el renderizado en el lado del servidor y luego obtener el token desde el servidor utilizando unuseEffect
asincrónico cuando el componente se monta en el lado del cliente:En este caso, necesitarías crear un punto final en tu servidor que devuelva el token de autenticación y reemplazar
/api/token
con la URL del punto final correspondiente.Espero que esto te ayude. Déjame saber si tienes alguna otra pregunta.