【发布时间】:2022-01-18 04:06:24
【问题描述】:
首先,提前感谢任何阅读我的问题和 cmets 的人。我有一个使用来自`@react-keycloak/web 的keycloak-js 和ReactKeycloakProvcer 的CRA 应用程序。当您第一次加载应用程序页面并登录时,keycloak 已正确初始化并正常运行。提供者以非常标准的方式获取 KC 的实例。
import keycloak from './authentication/keycloak'
const KeycloakProviderBlock = ({children}) => {
return (
<ReactKeycloakProvider authClient={keycloak} initOptions={{onLoad: 'login-required'}}>
{children}
</ReactKeycloakProvider>
);
};
稍后在我的 axios 包装器中,我将 KC 令牌拉出以添加到所有请求中作为不记名令牌,如下所示:
import keycloak from "./authentication/keycloak";
const {authenticated} = keycloak;
if (authenticated) {
client.defaults.headers.common = {
...client.defaults.headers.common,
Authorization: `Bearer ${keycloak.token}`,
};
} else {
logger.error("Request client used before KeyCloak initialized");
}
我的 keycloak 文件只返回一个新的 KC 实例 --> /authentication/keycloak.js 的内容
import Keycloak from "keycloak-js";
const keycloak = new Keycloak({
realm: process.env.REACT_APP_KEYCLOAK_REALM,
url: process.env.REACT_APP_KEYCLOAK_URL,
clientId: process.env.REACT_APP_KEYCLOAK_CLIENT,
})
export default keycloak
在用户硬刷新页面之前,一切都会正常运行。当页面重新加载时,KC 对象上不存在 keycloak.authenticated,因此所有 HTTP 调用都会失败,因为没有 Bearer 令牌。
我正在使用 keycloak-js 版本 15.0.2。任何/所有想法表示赞赏。
【问题讨论】:
标签: reactjs single-sign-on keycloak cra