【问题标题】:React authentication with Amazon Load Balancer and Cognito issue使用 Amazon 负载均衡器和 Cognito 问题反应身份验证
【发布时间】:2020-08-31 10:25:25
【问题描述】:

我正在使用带有 Cognito 的 Amazon 负载均衡器来对我的 React 应用程序上的用户进行身份验证。为了实现这一点,我创建了两条路由,一条被 ALB 识别为公共的,一条被识别为私有的,为此,如果 Cognito cookie 无效,它必须提示身份验证窗口。

所以,在 React 中,我是这样定义路由的:

<Switch>
    <Route userInfo={userInfo} exact path="/ui" >  
        <MainPage />
    </Route>
    <Route exact path="/">
        <StaticPage />
    </Route>
</Switch>

所以,正确地,当我单击公共静态页面上的登录按钮时,我被重定向到受保护的页面并且我可以进行身份​​验证。一切都按预期工作。

当我注销并尝试再次登录时会出现问题。在这种情况下,当 react 将我重定向到 /ui 时,它会从磁盘缓存中获取副本,并且 ALB 无法将其识别为新调用并且不会提示 UI。如果我刷新页面,它会正确提示我登录页面。

所以,我的问题是,如何强制 React 进行新调用而不是使用缓存副本(在 chrome 控制台上我可以看到:请求方法:GET 状态代码:200(来自磁盘缓存))?我尝试设置 HTML 元缓存标头,但它不能解决我的问题。

这是我的注销方法:

function logoutAction(ctx){

    console.log("[ang94402] SessionLogout started")

    cookies.remove('username');
    cookies.remove('password');

    // Remove Cognito cookies
    cookies.remove('AWSALBCORS');
    cookies.remove('AWSALB');
    cookies.remove('C2BAuthSessionCookie-0');

    sessionStorage.clear();

    setLoginErrorMessage(null);
    setUserInfo( {username:'',organization:'',userFullName:'',apiAuth:{}});

    // Calling Cognito url to logout
    asyncCognitoCall().then(history.push("/"));

  }

为了调用 /ui,我尝试使用 Link、href、windows.locate,但没有成功。它总是获取缓存的副本,而不是进行新的 get 调用。

谢谢。

【问题讨论】:

    标签: reactjs react-native react-router amazon-cognito


    【解决方案1】:

    您确定 cookie 已清除吗? 我必须通过 get 调用清除服务器端的安全 cookie。

    【讨论】:

      猜你喜欢
      • 2018-07-06
      • 1970-01-01
      • 1970-01-01
      • 2023-04-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-05
      • 2011-03-22
      相关资源
      最近更新 更多