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

点击浏览器上的刷新后对路由器v4登录检查作出反应

麹正业
2023-03-14

我正在使用react router v4并尝试实现一个受保护的api视图。例如,如果用户在未登录时转到/add/url,他们将被重定向到/login/,然后在成功登录后转到/add/

我能够利用这篇文章中的想法来实现它。但是,只要加载应用程序的初始http请求来自受保护的url,我就会遇到问题。

例如,当我在浏览器中输入'/add/'并按enter键时,我遇到了异步问题,我的应用程序没有时间向服务器发出ajax请求以检查登录,因此路由器最终路由到/login/,因为ajax身份验证请求尚未完成。

考虑到用户可能会在受保护的url(如'/add/')上启动会话,而不是在主'/'上启动会话,是否有人建议一般处理登录工作流?

共有1个答案

宰宣
2023-03-14

找到了一个简单的标准React模式解决方案。只是不要渲染

因此,当应用程序第一次加载时,初始化状态check ingLogIntrue,并且不呈现任何

使用示例代码编辑:

componentDidMount(){
// call the ajax function that checks if the user is logged in and update state when it returns; using fetch API here
 fetch(your_url, your_credentials)
   .then(
     that.setState({checkingLogIn: false, isLoggedIn: true})
        )
   .catch(...)
}
// render method of the React component
render(){
    if(this.state.checkingLogIn){
    return (<div>Loading...</div>)
    }
    else {
      return (
       <Route path={some_path} render={props => <SomeComponent {...props} />}></Route>
      )
    }

}

 类似资料:
  • angularfire2和firebase的Angular5身份验证应用程序。该应用程序使用应用程序内链接导航效果良好。但是,如果我点击浏览器刷新,它会将我重定向回登录页面。即使是true,allowed也总是返回False,因为我成功登录了firebase。 AuthInfo AuthService AuthGuard

  • 问题内容: 我正在从本教程中学习,但始终收到此错误: “ react-router”不包含名为“ browserHistory”的导出。 具有react-router的文件是这样的: 问题答案: 您现在需要从历史记录模块中获取。 请注意,他们最近更改了模块API,因此,如果您使用的是最新版本,则导入会稍有变化:

  • 问题内容: 我有一个连接到的前端,并且在端用定义了路由。当我用来将它们定向到动态路线时,它们可以正常工作。但是当我直接使用浏览器地址栏访问按Enter的链接时,或者我刷新了。 404页面不存在 而且我知道那是因为发生了对服务器的直接调用,并且当我们在共享主机上进行操作时,没有必要操纵共享主机上的操作。 考虑过但不适合API的动态特性。请允许我提供解决此问题的任何方法吗? 问题答案: 检查一下:ht

  • 我有一个小小的React应用程序项目,我已经在Github中部署了它。它的工作原理,甚至我使用导入{浏览器路由器,链接,交换机,路由}从"react-router-dom";路由和作品...这是我的代码:类应用程序扩展反应。组件{ render(){ } }导出默认应用程序;' 我在本地机器上使用过这个,没有“basename”,并且工作过。现在,在github服务器中,我的问题是,当您访问我的应

  • When webpack-dev-server is running it will watch your files for changes. When that happens it rebundles your project and notifies browsers listening to refresh. To trigger this behavior you need to ch