Blank page after logout when the app re-renders `<Admin>` during `authProvider.logout()`
メンテナーはふだん 1 日以内に返信
@uchiha-suraj がすでに取り組んでいます。
2026年10月30日 から。
評価
- 難易度
- 2/5
- 見積もり時間
- 1〜3時間
- 初心者へのやさしさ
- 76/100
- issue の種類
- バグ
- 明瞭さ
- 明確に書かれている
- 活発さ
- 活発
- 技術スタック
- react, typescript
- 領域
- frontend
調査の方向性
createHashRouter がレンダリング中に呼び出される packages/ra-core/src/routing/adapters/reactRouterProvider.tsx の InternalRouter から始めてください。useLogout が /login に遷移し、コンポーネントが再レンダリングされるとき、ルーターインスタンスがどのように使われるかを追ってください。説明した再現手順の後にログインページが表示されれば完了です。ログアウト中に <Admin> の上位にあるコンポーネントが再レンダリングされる場合も含みます。
索引モデルが issue の本文から書いたものです。
説明
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
- 主要言語
- TypeScript
- スター
- 27k
- フォーク
- 5.5k
- 平均マージ
- 1日 3分
- マージ済み PR(30日)
- 32
環境構築
- Dockerfile・Docker Compose ファイルなし
- プルリクエストのテンプレートあり
- コントリビューションガイドを読む
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
marmelab/react-admin のほかの issue
-
Pagination: page button aria-labels are not translated on small screens対応中かも @Singmin が 3 日前に担当しました。 オープン
難易度 2/5 1〜3時間 初心者へのやさしさ 82/100
marmelab/react-admin#11427 ·
メンテナーはふだん 1 日以内に返信
-
Add emptyText property to SelectArrayInput対応中かも @kwitykwity が 61 日前に担当しました。 オープンenhancement good first issue
難易度 2/5 1〜3時間 初心者へのやさしさ 72/100
marmelab/react-admin#10454 · コメント 7 件 ·
メンテナーはふだん 1 日以内に返信
-
難易度 4/5 1週間以上 初心者へのやさしさ 38/100
marmelab/react-admin#11426 · リアクション 1 件 ·
メンテナーはふだん 1 日以内に返信
-
ra-data-graphql-simple: outdated graphql-ast-types-browser dependency causes npm peer warnings再び着手できるかも @bipul724 が 15 日前に担当しましたが、オープン中のプルリクエストはありません。 オープン
難易度 4/5 3〜5日 初心者へのやさしさ 25/100
marmelab/react-admin#11395 · コメント 1 件 ·
メンテナーはふだん 1 日以内に返信
-
Fix decode-uri-component DoS (CVE-2026-45822) by dropping query-string再び着手できるかも このイシューのプルリクエストはマージされずにクローズされました。 オープン
難易度 3/5 1〜2日 初心者へのやさしさ 68/100
marmelab/react-admin#11380 · コメント 1 件 ·
メンテナーはふだん 1 日以内に返信
marmelab/react-admin の issue をすべて見る
似ている issue
-
check:passed streams:remove
難易度 1/5 1時間未満 初心者へのやさしさ 62/100
メンテナーはふだん 1 日以内に返信
-
bug needs triage
難易度 2/5 1〜3時間 初心者へのやさしさ 62/100
actions/setup-node#1659 ·
メンテナーはふだん 1 日以内に返信
-
難易度 2/5 1〜3時間 初心者へのやさしさ 78/100
vercel-labs/wterm#267 ·
メンテナーはふだん 2 日以内に返信
-
bug
難易度 2/5 1〜3時間 初心者へのやさしさ 75/100
microsoft/AI-Engineering-Coach#355 · リアクション 1 件 ·
メンテナーはふだん 4 日以内に返信
-
level1 nsoc26
難易度 2/5 1〜3時間 初心者へのやさしさ 70/100
GauravKarakoti/SecureFlow#1501 ·
メンテナーはふだん 1 日以内に返信