Javascript ReactJs受保护的路由重定向/刷新问题
使用Javascript ReactJs受保护的路由重定向/刷新问题,javascript,reactjs,Javascript,Reactjs,使用react+react路由器dom: import React from 'react'; import { Switch, Route, Redirect } from 'react-router-dom'; 并通过以下方式保护路线: 路由器 const Router = () => { return ( <Switch> <PrivateRoute exact path='/Panel' component={P
react
+react路由器dom
:
import React from 'react';
import { Switch, Route, Redirect } from 'react-router-dom';
并通过以下方式保护路线:
路由器
const Router = () => {
return (
<Switch>
<PrivateRoute exact path='/Panel' component={Panel}></PrivateRoute>
<Route exact path='/Register' component={Register}></Route>
<Route exact path='/Login' component={Login}></Route>
</Switch>
);
};
const PrivateRoute = ({ component: Component, ...rest }) => (
<Route
{...rest}
render={props =>
Auth.getAuth() ? (
<Component {...props} />
) : (
<Redirect
to={{
pathname: "/Login"
}}
/>
)
}
/>
);
因此,这工作正常,用户可以轻松登录、注销,但问题是当用户登录时,我想将用户重定向到/Panel
路径,因此我尝试:
window.location.href = "/Panel"
或:
两者都重定向到/Login
的速度太快,但如果我点击面板
链接到面板
路由。第二个问题是,当我刷新这个地址/面板上的页面时,它会使我再次回到/Login
。所以我想解决的是:
如何重定向到受保护的路由
在受保护路由上刷新页面时如何避免重定向?如果我键入此地址,并输入它不工作太多
已经看过此主题并尝试过,但没有成功:
关于第一个问题:
您可以将url保持如下状态,以便登录后可以重定向到
<Redirect
to={{
pathname: "/login",
state: { from: props.location }
}}
/>
关于第二个问题:
另一种解决方案是将登录状态保留在localStorage中,以便在刷新后应用程序可以从那里读取。这通常是通过将jsonwebtoken从登录api发送到客户端,并将该令牌保存到本地存储。在刷新之间存储isAuthenticated
的值。您必须将此值保存在LocalStorage
Hi tour travel中,是否检查了我的答案?@SuleymanSah是的,但它没有解决我的问题,我用自己的解决方案解决了。但你的逻辑是正确的,我给了+1个代表。谢谢
this.props.history.push('/Panel')
<Redirect
to={{
pathname: "/login",
state: { from: props.location }
}}
/>
const { state } = this.props.location;
window.location = state ? state.from.pathname : "/";