[英]Redirecting not working properly in react
我有一条专用路由(/ dashboard),仅当用户登录时才可以访问。因此,我的条件是仅当用户经过身份验证且加载为false(已完成)时才加载Dashboard。 如果用户未通过身份验证,则将其重定向到登录页面。
如果我从导航栏中单击“仪表板链接”,则我的代码工作正常。 如果我登录,它将重定向到仪表板,但是当我尝试通过直接键入localhost:3000 / dashboard手动进入仪表板时,问题就出现了。 即使刷新仪表板,它也会将我重定向到登录页面。
因此,导致此问题的原因是两个状态(身份验证和加载)都位于Redux中,因此,如果我直接访问仪表板,则Redux需要花费一些时间来登录用户并更改状态,因此即使我返回首页如果我已登录。
我需要花费一些时间,因为我在本地存储中有一个令牌,并且通过向后端发送发布请求以确认令牌是否有效来对其进行检查,在有效令牌上,我使用户进入还原状态。
在App.js中
<Switch>
<Route exact path="/register" component={Register} />
<Route exact path="/login" component={Login} />
<PrivateRoute exact path="/dashboard" component={
</Switch>
PrivateRoute.js
const PrivateRoute = props => {
let route = <Route {...props} component={props.component} />;
if (!props.isLoading && !props.isAuthenticated) {
route = <Redirect to="/login" />;
}
return <React.Fragment>{route}</React.Fragment>;
}
您会看到在“专用路由”中立即检查了该条件,由于该用户手动进入/ dashboard会被重定向到主页。
我该如何解决这个问题?
解决的问题:由于isLoading始终未定义,因此我有一点错字。 通过修复它,它工作正常
您可以通过将Web服务器重定向到React SPA的登录页面来解决此问题。 它可以是/login/
但通常是/
。 此时页面被重新加载,React应用程序开始重新执行,React代码确定(检查是否存在cookie,而不查看刚创建的Redux存储)用户未登录并在内部重定向从“ /”到“ / login /”。
Web服务器不会意识到此内部重定向,它在SPA内部。 但是,如果用户在导航栏上键入URL并按Enter(我知道是问题),则Web服务器将知道。
如果使用webpack-dev-server,则可以通过将historyApiFallback设置为true
并指定重定向URL来实现SPA所需的重定向类型。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.