私は巨大なDjangoウェブアプリケーションを持っています。その1つは、ノードで書かれたモジュール(ダッシュボード)です。ユーザログインはDjangoモジュールによって処理されます。react-router v4で絶対パスにリダイレクトするにはどうすればよいですか?
反応ダッシュボードにアクセスするには、メインアプリにログインする必要があります。これは部分的に機能します。コードはユーザーセッションをブラウザから取得し、存在する場合にのみレンダリングします。
セッションがなければメインのログインページにリダイレクトしたいと思いますが、現在の構造(とこの血まみれのv4ルーター)でどうやって行うのか分かりません。
BrowserRouterコンポーネントのベース名を使用して、djangoアプリケーションのダッシュボードパスに関連するルートを使用しています。
これは私がapp.jsxためJSXのために思い付いたものです:
<BrowserRouter basename='/en/dashboard'>
{this.state.isAuthenticated ? (
<Paper zDepth={0} style={{ height: '100%', backgroundColor: grey900 }}>
<div style={{height: '100%'}}>
<Header />
<Switch>
<Route exact={true} path='/' component={FirstSection}/>
<Route path='/first' component={FirstSection}/>
<Route path='/second' component={SecondSection}/>
</Switch>
</div>
</Paper>
) : (
<Redirect to="/en/login"/>
)}
</BrowserRouter>
はしかし、それは実際にen/dashboard/en/login
にリダイレクトします。私は、BrowserRouterから 'basename'プロパティを削除してそれを各後続のRouteに追加することができると信じていますが、このモジュールが最終的に大きくなると、ルーティングが困難になります。これを行うより良い方法はありますか?
私は、 'history/createBrowserHistory.js'と' react-router/Redirect.js'にパッチを適用してignoreBasenameオプションを実装することができました。これは興味がありますので、機能を作って、後のバージョンに追加することを検討しています。 –
ニュースはありますか?このオプションは非常に便利です。 –
申し訳ありませんが、私はこれ以上追求することに反対しました。私はReact-Routerのv4の 'browserRouter'にこれをしていました。これは19行目のヒストリモジュールをインスタンス化しています。 77行目の 'createBrowserHistory.js'の警告を避けるには、createBrowserHistory.jsにフラグを追加し、それをbrowserRouterにインクルードし、' ignoreBasename'機能を実装する必要があります。これは難しくありませんが、異なるルータタイプ間で変更を複製する必要があり、複数のライブラリに影響します。私は問題がその変更を保証するのに十分普及しているとは思わない。 –