目前我在ReactJS和路由方面遇到了一个小问题。如果令牌不存在,我希望我的应用程序将重定向回登录界面。应用程序不应具有访问其他页面的权限。如果用户尝试输入无效令牌进行重定向,则应默认返回登录页面。
目前我的代码如下。
import { BrowserRouter, Route, Redirect, Switch } from 'react-router-dom';
...
render() {
const token = localStorage.getItem('access_token');
return (
<BrowserRouter>
{!token ? <Route render={() => <Redirect push to="/" />} /> :
<Switch>
<Route exact path="/" component={Login} />
<Route exact path="/validate" component={ValidateLoginContainer} />
<Route exact path="/home" component={Landing} />
<Route exact path="/non-arrivals" component={NonArrivals} />
<Route exact path="/due-in-summary" component={DueInSummary} />
<Route exact path="/due-in-forecast" component={DueInForecastDetail} />
<Route exact path="/hourly-arrivals-departures" component={HourlyArrivalsDepartures} />
<Route exact path="/overstays" component={Overstays} />
</Switch>
}
</BrowserRouter>
);
}
问题在于重定向是成功的,但页面却是空白的。
更新了代码,仍然出现相同的错误:
<BrowserRouter>
<Switch>
<Route render={() => {
if (!token) {
return <Redirect push to="/" />;
}
return <Redirect push to="/home" />;
}}
/>
<Redirect exact from="/" to="/home" />
<Route exact path="/" component={Login} />
<Route exact path="/validate" component={ValidateLoginContainer} />
<Route exact path="/home" component={Landing} />
<Route exact path="/non-arrivals" component={NonArrivals} />
<Route exact path="/due-in-summary" component={DueInSummary} />
<Route exact path="/due-in-forecast" component={DueInForecastDetail} />
<Route exact path="/hourly-arrivals-departures" component={HourlyArrivalsDepartures} />
<Route exact path="/overstays" component={Overstays} />
</Switch>
</BrowserRouter>