Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/478.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript ReactJs受保护的路由重定向/刷新问题_Javascript_Reactjs - Fatal编程技术网

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 : "/";