我正在用授权码/PKCE测试一个基本的React应用程序,遇到了一个奇怪的问题。该应用程序如下所示:
index.js:
const root = ReactDOM.createRoot(document.getElementById('root'));
initKeycloak();
root.render(
<BrowserRouter>
<Routes>
<Route path="/" element={<App/>} />
</Routes>
</BrowserRouter>
);
function App() {
return (
<div>
<button onClick={() => keycloak.login()}> Login </button>
</div>
);
}
Provider.js:
let keycloak = new Keycloak({
url: "http://localhost:8081/",
realm: "test",
clientId: "test-public"
});
export function initKeycloak() {
keycloak.init({
redirectUri: "http://localhost:3000",
pkceMethod: "S256"
}).then(() => console.log(keycloak));
}
export default keycloak;
再简单不过了。一切都很好;我按下登录按钮,重定向并登录,重定向回,然后我就通过了身份验证(打印keycloft对象将显示(。然而,当我重新加载页面并打印密钥斗篷对象时,它会告诉我没有通过身份验证。
只有再次单击登录按钮,它才会重新加载页面(而不重定向到登录页面(并显示我已通过身份验证。
据我所见,这不是预期的行为——当我刷新页面时,它应该会让我保持身份验证。有人有解决方案吗?
问题是我在初始化时没有将其设置为检查单个登录。
export function initKeycloak() {
keycloak.init({
onLoad: 'check-sso',
redirectUri: "http://localhost/user",
pkceMethod: "S256"
}).then(() => console.log(keycloak));
}