reactjs - 在反应 js 中更改 url 后,登录页面显示在仪表板内
问题描述
我正在为我的应用程序使用核心 ui 模板,其中它有一个默认的应用程序页面、仪表板页面和登录页面。我已经设置了检查用户是否登录的功能。如果没有,我将显示登录页面。用户成功登录后,我将显示仪表板页面。但是当我手动更改 url 时,我可以在仪表板页面内看到登录页面。谁能告诉我如何解决这个问题。
默认布局:
class DefaultLayout extends Component {
constructor(props) {
super(props);
this.state = {};
}
render() {
const user = this.props;
console.log('user in DefaultLayout', user);
return (
<div className="app">
{user.authUser!=null && (<AppHeader fixed>
<DefaultHeader />
</AppHeader>)}
<div className="app-body">
{user.authUser!=null && (
<AppSidebar fixed display="lg">
<AppSidebarHeader />
<AppSidebarForm />
<AppSidebarNav navConfig={navigation} {...this.props} />
<AppSidebarFooter />
<AppSidebarMinimizer />
</AppSidebar>
)}
<main className="main">
<ToastContainer />
{user.authUser!=null && (
<AppBreadcrumb appRoutes={routes} />
)}
<Container fluid>
<Switch>
{routes.map((route, idx) => {
return route.component ? (
<Route
key={idx}
path={route.path}
exact={route.exact}
name={route.name}
render={(props) => <route.component {...props} />}
/>
) : null;
})}
<Redirect from="/" to="/dashboard" />
</Switch>
</Container>
</main>
{user.authUser!=null && (
<AppAside fixed hidden>
<DefaultAside />
</AppAside>
)}
</div>
{user.authUser!=null && (
<AppFooter>
<DefaultFooter />
</AppFooter>
)}
</div>
);
} }
路线:
const routes = [
{ path: '/', exact: true, name: 'Home', component: DefaultLayout },
{ path: '/signin', exact: true, name: 'SignIn', component: SignIn },
{ path: '/dashboard', exact: true, name: 'Dashboard', component: Dashboard },
{ path: '/employee', exact: true, name: 'Employee', component: Employee },
{ path: '/agent', exact: true, name: 'Agent', component: Agent }
];
输出:
解决方案
与其检查用户是否在任何地方都经过身份验证,不如直接检查 Switch 内部?
{routes.map((route, idx) => {
return route.component ? (
<Route
key={idx}
path={route.path}
exact={route.exact}
name={route.name}
render={props =>
user.authUser!=null (
<route.component {...props} />
) : (
<Redirect to={{ pathname: "/login" }} />
)
}
/>
) : null;
})}
<Redirect from="/" to="/dashboard" />
推荐阅读
- html - 如何正确定位按钮
- batch-file - 通过 CMD 执行 Stata .do 文件,但由于路径中的重音字符而失败
- javascript - “错误:来自 onMessage 侦听器的承诺响应超出范围”是什么意思?从哪里获取更多调试信息?
- firebase - 使用 Firebase OpenID Connect 提供程序作为 Azure Function App 身份提供程序
- javascript - Odoo 14 在搜索框中设置值并显示建议
- html - 主题订阅中的值更改未触发 NgIf
- python - SQLAlchemy 关系:与两个 ForeignKey 列中的任一个匹配的对象列表
- cmake - 如何链接到 Debian 上 /usr/lib/$ARCH 目录中的 llvm 库
- linux - 挂载文件系统
- java - 如何加载模型实例?问题:不能是案例