与keycloak js适配器和react-keycloak绑定反应导致无限循环
React with keycloak js adapter and react-keycloak binding resulting in an endless loop
所以我刚刚创建了一个新的 React 项目,我在其中使用带有 react-keycloak/web 依赖项的官方 keycloak-js 适配器来进行反应绑定。我遵循了所有“官方”的做事方式,我有这个:
keycloak.js(配置):
import Keycloak from "keycloak-js";
// Setup Keycloak instance as needed
const keycloak = new Keycloak({
realm: "SomeRealm",
url: process.env.REACT_APP_KEYCLOAK_URL + "/auth/",
clientId: "app-id",
});
export default keycloak;
索引文件如下所示:
// Keycloak
import { ReactKeycloakProvider } from "@react-keycloak/web";
import keycloak from "./keycloak";
const keycloakProviderInitConfig = {
onLoad: "login-required",
};
ReactDOM.render(
<ReactKeycloakProvider
authClient={keycloak}
initOptions={keycloakProviderInitConfig}
>
<React.StrictMode>
<ChakraProvider>
<App />
</ChakraProvider>
</React.StrictMode>
</ReactKeycloakProvider>,
document.getElementById("root")
);
因此,如果用户未通过身份验证,此“应该”将用户重定向到登录,而是呈现页面外的内容。因此,我尝试了另一种实现方式,即使用此代码段有条件地显示内容:
useEffect(() => {
if (!keycloak.authenticated) {
keycloak.login();
}
}, [keycloak]);
return keycloak.authenticated ? (
<>
<Navbar />
<SomeContent />
</>
) : null;
但如果用户通过身份验证,这将导致无限循环。
任何帮助将不胜感激:)
版本:
"@react-keycloak/web": "^3.4.0",
"keycloak-js": "^12.0.3"
愚蠢的我,问题是我使用的keycloak服务器与react-keycloak和keycloak-js的版本不匹配
所以我刚刚创建了一个新的 React 项目,我在其中使用带有 react-keycloak/web 依赖项的官方 keycloak-js 适配器来进行反应绑定。我遵循了所有“官方”的做事方式,我有这个:
keycloak.js(配置):
import Keycloak from "keycloak-js";
// Setup Keycloak instance as needed
const keycloak = new Keycloak({
realm: "SomeRealm",
url: process.env.REACT_APP_KEYCLOAK_URL + "/auth/",
clientId: "app-id",
});
export default keycloak;
索引文件如下所示:
// Keycloak
import { ReactKeycloakProvider } from "@react-keycloak/web";
import keycloak from "./keycloak";
const keycloakProviderInitConfig = {
onLoad: "login-required",
};
ReactDOM.render(
<ReactKeycloakProvider
authClient={keycloak}
initOptions={keycloakProviderInitConfig}
>
<React.StrictMode>
<ChakraProvider>
<App />
</ChakraProvider>
</React.StrictMode>
</ReactKeycloakProvider>,
document.getElementById("root")
);
因此,如果用户未通过身份验证,此“应该”将用户重定向到登录,而是呈现页面外的内容。因此,我尝试了另一种实现方式,即使用此代码段有条件地显示内容:
useEffect(() => {
if (!keycloak.authenticated) {
keycloak.login();
}
}, [keycloak]);
return keycloak.authenticated ? (
<>
<Navbar />
<SomeContent />
</>
) : null;
但如果用户通过身份验证,这将导致无限循环。
任何帮助将不胜感激:)
版本:
"@react-keycloak/web": "^3.4.0",
"keycloak-js": "^12.0.3"
愚蠢的我,问题是我使用的keycloak服务器与react-keycloak和keycloak-js的版本不匹配