当用户未登录用户尝试访问私有路由时,向所有私有路由显示警报

Posted

技术标签:

【中文标题】当用户未登录用户尝试访问私有路由时,向所有私有路由显示警报【英文标题】:displaying alert to all the private route when user non logged in user tries to visit private route 【发布时间】:2020-06-01 08:28:34 【问题描述】:

我的 react js 应用程序中有两条路由 privatepublic route。我想知道当未登录用户尝试访问私有路由时,是否可以向所有私有路由显示警报。我不想在每个私有组件内部做。 我自己尝试过,但当用户未登录时,它开始在每个页面上发出警报。

这是我的私人路线代码。

const PrivateRoute = ( component: Component, ...rest ) => 
  // console.log("restprivate", rest);
  const  changeBottomNavBar, tansformToButton, changeHeaderForOrder  = rest;
  //console.log("loggedin", Store.getState().user.data.loggedIn);
  return (
    <div style= width: "100wv" >
      <HeaderContainer
        privateHeader=true
        changeHeaderForOrder=changeHeaderForOrder
      />
      <TermsOfUse />
      <PrivacyPolicy />
      <VendorTerms />
      <Route
        ...rest
        render=(props) =>
          Store.getState().user.data.loggedIn ? (
            <Component ...props />
          ) : (
            <Component ...props />
          )
        
      />
      <Mobile>
        changeBottomNavBar ? (
          <BottomNavBarContainer />
        ) : (
          <BottomNavBar tansformToButton=tansformToButton />
        )
      </Mobile>
      <Desktop>
        <Footer />
      </Desktop>
    </div>
  );
;

【问题讨论】:

【参考方案1】:

重构 Route 组件 render 回调以检查 loggedIn 值并在返回组件以呈现之前触发警报。

<Route
  ...rest
  render=(props) => 
    const  loggedIn  = Store.getState().user.data;
    !loggedIn && alert('This is a private Route');
    return loggedIn ? (
      <Component ...props />
    ) : (
      <Component ...props /> // <-- Why return same Component?
    )
  
/>

【讨论】:

以上是关于当用户未登录用户尝试访问私有路由时,向所有私有路由显示警报的主要内容,如果未能解决你的问题,请参考以下文章

条件满足后,私有路由不重定向

react JS中的私有路由jsx

反应路由器重定向在私有路由中不起作用

使用私有路由和上下文响应身份验证

受限路由 JWT

私有登台S3存储桶的策略