Blank page after logout when the app re-renders `<Admin>` during `authProvider.logout()`
Los mantenedores suelen responder en 1 día
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 2/5
- Tiempo estimado
- 1-3 horas
- Aptitud para principiantes
- 76/100
- Tipo de issue
- Error
- Claridad
- Bien especificado
- Estado de actividad
- Activo
- Stack tecnológico
- react, typescript
- Área
- frontend
Línea de trabajo
Empieza por InternalRouter en packages/ra-core/src/routing/adapters/reactRouterProvider.tsx, donde se llama a createHashRouter durante el renderizado. Sigue cómo se usa la instancia del router cuando useLogout navega a /login y el componente se vuelve a renderizar. Se considera terminado cuando la página de inicio de sesión se renderiza después de la reproducción descrita, incluso si el componente situado por encima de <Admin> se vuelve a renderizar durante el cierre de sesión.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
What you were expecting:
When checkAuth fails, the user lands on the login page.
What happened instead:
The URL changes to #/login, but the page stays blank.
The router is still on the previous location, rendering LogoutOnMount (which renders null).
It happens whenever the component rendering <Admin> re-renders while authProvider.logout() is running.
Auth SDKs commonly trigger this: clearing the session notifies a context provider above <Admin>.
Steps to reproduce:
- Render the app below.
- Open
/#/posts. - The URL becomes
/#/login, but nothing is rendered.
Related code:
import { useState } from "react";
import { Admin, CustomRoutes } from "react-admin";
import { Route } from "react-router-dom";
let rerender = () => {};
const authProvider = {
login: () => Promise.resolve(),
checkAuth: () => Promise.reject(new Error("no session")),
checkError: () => Promise.resolve(),
getPermissions: () => Promise.resolve(),
logout: () => {
rerender(); // stands for an auth SDK notifying the app that the session was cleared
return Promise.resolve();
},
};
export const App = () => {
const [, setTick] = useState(0);
rerender = () => setTick((t) => t + 1);
return (
<Admin authProvider={authProvider} requireAuth loginPage={() => <div>Login page</div>}>
<CustomRoutes>
<Route path="/posts" element={<div>Posts</div>} />
</CustomRoutes>
</Admin>
);
};
Other information:
-
Cause:
InternalRouterinpackages/ra-core/src/routing/adapters/reactRouterProvider.tsxcallscreateHashRouter(...)in its render body.
Every re-render creates a new router at the current URL.
Thenavigate("/login")scheduled byuseLogoutgoes to the discarded router: it updates the URL, but the current router never sees it. -
Suggested fix: create the router once, e.g. with
useState(() => createHashRouter(...)). -
Workaround: wrap the app in a router created once, which
RouterWrapperthen uses:const router = createHashRouter([{ path: "*", element: <App /> }]); root.render(<RouterProvider router={router} />);
Environment
- React-admin version: 5.15.5
- React version: 19.3.1
- React Router version: 7.18.4
- Lenguaje dominante
- TypeScript
- Estrellas
- 27k
- Forks
- 5.5k
- Merge medio
- 1 d 3 min
- PR fusionados (30 d)
- 32
Preparar el entorno
- Sin Dockerfile ni archivo de Docker Compose
- Tiene una plantilla de pull request
- Leer la guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de marmelab/react-admin
-
Pagination: page button aria-labels are not translated on small screensPosiblemente ocupada @Singmin la tomó hace 1 día. Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 82/100
marmelab/react-admin#11427 ·
Los mantenedores suelen responder en 1 día
-
Add emptyText property to SelectArrayInputPosiblemente ocupada @kwitykwity la tomó hace 59 días. Abiertoenhancement good first issue
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
marmelab/react-admin#10454 · 7 comentarios ·
Los mantenedores suelen responder en 1 día
-
Dificultad 4/5 Más de una semana Aptitud para principiantes 38/100
marmelab/react-admin#11426 · 1 reacción ·
Los mantenedores suelen responder en 1 día
-
ra-data-graphql-simple: outdated graphql-ast-types-browser dependency causes npm peer warningsQuizá libre de nuevo @bipul724 la tomó hace 13 días y no hay ningún pull request abierto. Abierto
Dificultad 4/5 3-5 días Aptitud para principiantes 25/100
marmelab/react-admin#11395 · 1 comentario ·
Los mantenedores suelen responder en 1 día
-
Fix decode-uri-component DoS (CVE-2026-45822) by dropping query-stringQuizá libre de nuevo Un pull request para esta issue se cerró sin fusionarse. Abierto
Dificultad 3/5 1-2 días Aptitud para principiantes 68/100
marmelab/react-admin#11380 · 1 comentario ·
Los mantenedores suelen responder en 1 día
Todos los issues de marmelab/react-admin
Issues similares
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
-
area:desktop area:ui bug platform:macos
Dificultad 2/5 1-3 horas Aptitud para principiantes 67/100
anthropics/claude-code#106183 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 76/100
-
Dificultad 1/5 1-3 horas Aptitud para principiantes 76/100
Los mantenedores suelen responder en 1 día
-
reproduced
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
anomalyco/opencode#60558 · 1 comentario ·
Los mantenedores suelen responder en 1 día