【发布时间】:2017-07-19 17:29:25
【问题描述】:
我有一个巨大的 Django 网络应用程序,其中一个模块(“仪表板”)是用节点编写的并做出反应。用户登录由 Django 模块处理。
用户应该登录到主应用程序才能访问反应仪表板,这部分工作 - 代码从浏览器获取用户会话,并且只有在存在时才会呈现内容。
如果没有会话,我现在想将用户重定向到主应用登录页面,但我不知道如何使用我当前的结构(以及这个该死的 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' 属性并将其添加到每个后续路由中,但是如果这个模块最终变得更大,它将使路由变得更加困难。有没有更好的方法来做到这一点?
【问题讨论】: