【发布时间】: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