当前位置: 首页 > 知识库问答 >
问题:

React路由器-PrivateRoute,登录后重定向到原始目的地

闻飞跃
2023-03-14

我在使用React路由器进行登录后重定向时遇到问题。

假设用户试图导航到http://website.com/app/profile/2但被重定向到http://website.com/login因为他们的会话已过期。endpoint/app存在于PrivateRoute中。

登录后,我希望用户被引导到http://website.com/app/profile/2,但相反,他们目前只重定向到/app

成功登录后,如何利用原始目的地进行重定向?

谢谢你的时间!

共有2个答案

仲孙善
2023-03-14

您可以尝试在privateRoute组件或您正在使用的任何组件中创建某种类型的检查,如果用户未能进行身份验证,则该检查将存储访问的路由的名称。(将其存储在将用户重定向到登录页面之前)

然后在登录函数中,您可以在重定向之前检查用户的localstorage,如果他在localstorage中有值,则将他重定向到stores路由,否则重定向到主登录后路由

编辑:选中此项以获取路由名称React Router v4-如何获取当前路由?

我通常使用

this.props.location.pathname

东方玉泽
2023-03-14

您可以通过如下方式从专用路径检查此项:

const PrivateRoute = ({component: Component, ...rest}) => {
    let token = localStorage.getItem('token');
    let pathname = this.props.location.pathname;

    if(!token && pathname != '/login'){
       localStorage.setItem('redirectTo', pathname);
    }
    
    return (<Route {...rest} render={(props) => (
            token
                ? <Component {...props} />
                : <Redirect to='/login'/>
        )}/>
    );
};

这样,如果用户在localStorage中有一个令牌,则重定向到他请求的页面,如果没有,则重定向到login页面并将请求的路径存储在local storage中,然后在登录函数成功登录后,您可以检查这一点

let redirectTo = localStorage.getItem('redirectTo');
if(redirectTo ){
    window.location.href = redirectTo;
}

 类似资料:
  • 我是React Redux路由器的新手,在成功登录后如何将用户转发到所请求的PrivateRoute上,我一直在绞尽脑汁。 react cognito启动操作,并在成功登录时在存储中设置。我知道react路由器将请求的路由存储在中,我知道要重定向浏览器路由器,我可以使用。 我只是不知道我的代码去了哪里,所以它在react-cognito-onSubmit登录函数异步完成后执行,因为这个包没有提供回

  • 在我的Laravel应用程序中,我有一个只能由Auth用户访问的私人页面。我也使用社交登录,所以当用户未登录就进入私人页面时,Laravel会将用户发送到登录页面,成功登录后,用户会被发送回原始目的地(私人页面)。只有当用户通过Laravel内置认证系统登录时,但当用户通过社交登录方法登录时,用户将被引导到主页。 这是我登录后的社交登录处理程序: 如果用户在会话中出现,我如何将其发送到原始目的地,

  • 这似乎是一个非常基本的流程,而且Laravel有很多很好的基本解决方案,我觉得我错过了一些东西。 用户单击需要身份验证的链接。Laravel的身份验证过滤器启动并将它们路由到登录页面。用户登录,然后转到他们试图在“身份验证”过滤器启动之前进入的原始页面。 有没有一个好方法可以知道他们最初想要到达的页面?由于Laravel是拦截请求的人,我不知道它是否会在用户登录后跟踪某个地方以方便路由。 如果没有

  • 我试图利用从redux store到HOC的状态来允许或拒绝我*应用程序中的用户,例如私人路由。 我下面的文档从反应路由器,它的一半工作。我的问题是,当我转到网址或刷新新认证的路由时,如果没有认证,我会被重定向。点击导航栏工作,见下面我的gif。 *我也在使用Next.JS,但无法让路由系统使用语义UI React。这就是我使用React路由器的原因。 这是我的全部内容: My HOC Priva

  • Reducer.js 我想在成功登录后重定向/主页。我如何重定向?

  • 我现在一直在努力使用我的登录页面来让组件呈现Loggedin组件。我的前端是Reactjs,后端是NodeJS。我对nodejs、expression和react都是新手。 在loginform组件上,我使用fetch进行了一次post,它将用户名和密码传递给后端的相应endpoint。没问题。在后端,它读取我存储用户(不使用任何数据库)的jsonfile来查找匹配项,如果用户名和密码都匹配,则它