Estoy usando Remix-run y quiero redirigir a mi página de inicio de sesión desde una función de utilidad de autenticación. pero no funciona aquí hay una función similar a mi método de utilidad de autenticación
import { redirect } from 'remix'; async function authenticate(request){ try{ const user = await rpc.getUser(request); return user } catch(e){ console.log(e) // logs error when rpc fails if(e.response.status === 401){ return redirect('/login') } return redirect('/500') } } //component.jsx
import {useLoaderData } from 'remix'; export async function loader({ request }) { const user = await auth.authenticate(request); return { user }; } export default function Admin(){ const { user } = useLoaderData(); return <h1>{user.name}</h1> } si el auth rpc falla, obtengo el error en los registros. pero la redirección nunca sucede. Si muevo la parte de redirect a mi función de cargador, funciona como se esperaba. no solo funciona dentro de la función de utilidad
Después de buscar en la demostración de la aplicación docs and remix jokes. Descubrí que necesita lanzar una redirección desde cualquier otra función que no sean cargadores/acciones para hacer redirecciones. también puede lanzar una respuesta Http si lo desea.
import { redirect } from 'remix'; async function authenticate(request){ try{ const user = await rpc.getUser(request); return user } catch(e){ if(e.response.status === 401){ throw redirect('/login') } throw redirect('/500') } }Esto lamentablemente no funcionó para mí.
Estoy tratando de redirigir mediante programación dependiendo de una actualización de estado. Para este propósito creé este fn:
const redirectToNested = (to) => { throw redirect('/to'); };que vive fuera de mi componente de reacción, el cargador o la acción. Todavía recibo un bloqueo con el error "Error: no se puede inicializar 'routeModules'. Esto normalmente ocurre cuando tiene un código de servidor en sus módulos de cliente".